我使用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>
我想申请类似的XPath 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线。 所以,我怕的是,遍历方法将如何有效的是。
期待任何更好的建议