我正在使用 XOM 库来解析 xml。我有以下 XML
<ns4:parent xmlns:ns4="http://sample.xml.com/ns4">
<ns4:child1 xmlns:ns1="http://sample.xml.com/ns1" xmlns:xsi="http://sample.xml.com/xsi">
<ns1:child2>divaStatus</ns1:child2>
<xsi:child>something</xsi:child>
</ns4:child1>
</ns4:parent>
我想应用一个像ns4:parent/ns4:child1/ns1:child2
. 所以我的代码如下
Document doc = new Builder().build(inStream); //inStream is containing the xml
XPathContext xc = XPathContext.makeNamespaceContext(doc.getRootElement());
doc.query("ns4:parent/ns4:child1/ns1:child2", xc);
我要XPathException
到这里了。
Exception in thread "main" nu.xom.XPathException: XPath error: XPath expression uses unbound namespace prefix ns1.
我可以理解,由于我仅通过根元素创建命名空间上下文,因此它没有获取其子元素的命名空间。因此,一种解决方法可能是遍历所有孩子并收集他们的命名空间并将其添加到XpathContext
对象中。但我的 xml 可以是 10 到 20k 行。所以我担心遍历方法的效率会有多高。
期待任何更好的建议