【发布时间】:2017-10-27 08:16:58
【问题描述】:
我有以下 xml:
<?xml version="1.0" encoding="UTF-8"?>
<prefix:someName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:prefix="someUri" xsi:schemaLocation="someLocation.xsd">
<prefix:someName2>
....
</prefix:someName2>
</prefix:someName>
我的代码如下所示:
private Node doXpathThingy(Document doc) {
final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
XPath xPath = XPathFactory.newInstance().newXPath();
xPath.setNamespaceContext(new NamespaceContext(){
@Override
public String getNamespaceURI(String prefix) {
if (prefix == null) {
throw new NullPointerException("Null prefix");
}
return doc.lookupNamespaceURI(prefix);
}
@Override
public String getPrefix(String namespaceURI) {
return null;
}
@Override
public Iterator getPrefixes(String namespaceURI) {
return null;
}
});
try {
XPathExpression expr = xPath.compile(xpathString);
return (Node)expr.evaluate(doc, XPathConstants.NODESET);
} catch (Exception e) {
.... }
}
我试图让它与任何有效的 xpath 一起工作。它适用于这些 xpath:
“前缀:someName”
“。”
但不是:“前缀:someName2”。它返回 null。
我想我仍然没有得到关于命名空间的东西,但我不明白什么?我试过从我的 xpath 中省略前缀,但没有任何效果。 我还检查了是否为 doc.lookupNamespaceURI(prefix) 的前缀返回了正确的 uri,并且确实如此。
任何帮助将不胜感激。
【问题讨论】:
标签: java xml xpath namespaces