我正在做这个小项目,我的任务是读取一个xml文件并解析它,以便它可以存储在一个类中。 这是xml示例。它是用SOAP编写的,我想做的是获取
<ns2:getNewTokenResponse xmlns:ns2="http://abc.examples.com/">
解析了这部分和子节点,以便我可以创建一个具有'nodeName'作为属性的类,其值为'getNewTokenResponse'。 +会话密钥
<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
<env:Header>
</env:Header>
<env:Body>
<ns2:getNewTokenResponse xmlns:ns2="http://abc.examples.com/">
<return>
{{session.key}}
</return>
</ns2:getNewTokenResponse>
</env:Body>
</env:Envelope>
但我真正的问题是,我找到了许多好的示例代码,名称空间没有前缀,xml文件的结构可能会有所不同。所以在这里我很困惑地完成任务。我会感激任何建议。干杯:d
答案 0 :(得分:1)
要使用Java中的命名空间进行XPath查询,我相信您需要执行以下操作:
XPath xpath = XPathFactory.newInstance().newXPath();
xpath.setNamespaceContext(new NamespaceContext() {
@Override
public String getNamespaceURI(String prefix) {
switch (prefix) {
case "env":
return "http://schemas.xmlsoap.org/soap/envelope/";
case "ns2":
return "http://abc.examples.com/";
}
return XMLConstants.NULL_NS_URI;
}
@Override
public String getPrefix(String namespaceURI) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Iterator getPrefixes(String namespaceURI) {
throw new UnsupportedOperationException("Not supported yet.");
}
});
Node getNewTokenResp =
(Node) xpath.evaluate("/env:Envelope/env:Body/ns2:getNewTokenResponse",
document, XPathConstants.NODE);
在创建.setNamespaceAware(true);
以解析文档之前,您还需要在DocumentBuilderFactory
上致电DocumentBuilder
。