Java 无法分析具有不同命名空间的XML
我有这样一个示例XML:Java 无法分析具有不同命名空间的XML,java,xml,xpath,Java,Xml,Xpath,我有这样一个示例XML: <Envelope xmlns='http://schemas.xmlsoap.org/soap/envelope/'> <Header> </Header> <Body> <getNewTokenResponse xmlns="http://abc.examples.com/"> <return> {{
<Envelope xmlns='http://schemas.xmlsoap.org/soap/envelope/'>
<Header>
</Header>
<Body>
<getNewTokenResponse xmlns="http://abc.examples.com/">
<return>
{{session.key}}
</return>
</getNewTokenResponse>
</Body>
</Envelope>
它没有返回正确的值,因为命名空间没有使用前缀
有更好的解析方法吗?您应该使用
/s:Envelope/s:Body/p:getNewTokenResponse/p:return
作为XPath表达式,并提供一个将s
映射到http://schemas.xmlsoap.org/soap/envelope/
和p
到http://abc.examples.com/
XPath xpath = XPathFactory.newInstance().newXPath();
HashMap nsMap = getNameSpaceMap(input);
xpath.setNamespaceContext(new NamespaceContext() {
@Override
public String getNamespaceURI(String prefix) {
if(nsMap.has(prefix)){
return nsMap.get(prefix);
}
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("/Envelope/Body/getNewTokenResponse/return",
document, XPathConstants.NODE);