<invoice>
<obs>
<ob>
<code>ABC</code>
</ob>
<ob>
<code>123</code>
</ob>
</obs>
</invoice>
<invoice>
<obs>
<ob>
<code>DEF</code>
</ob>
</obs>
</invoice>
</invoices>
好的,我的问题是,我有一个 xml,它将从外部系统传给我,它可以有大量的“发票”节点,一个“发票”节点可以有大量的“代码”节点。我想读取所有“发票”节点的“代码”节点并将它们保存在这样的数组中:invoice[1].code[1]=ABCinvoice[1].code[2]=123invoice[2] .code[1]=DEF 。如何在 JAVA 中使用 XPathExpression 来执行此操作。下面是我的 xpath 表达式,它不起作用。
expr = xpath.compile("//invoices/invoice/obs/ob/code/text()");
请给出“发票”节点数和“代码”数量的一般答案 节点高
最佳答案
您的 XML 结构不佳。有一个<invoices>
一开始就失踪了。正确的结构如下:
<invoices>
<invoice>
<obs>
<ob>
<code>ABC</code>
</ob>
<ob>
<code>123</code>
</ob>
</obs>
</invoice>
<invoice>
<obs>
<ob>
<code>DEF</code>
</ob>
</obs>
</invoice>
</invoices>
您定义的xpath表达式是正确的。我使用以下命令测试了 python(和 lxml 库)的速度:
from lxml import etree
tree = etree.parse('yourfile.xml')
root = tree.getroot()
root.xpath('//invoices/invoice/obs/ob/code/text()')
我得到了你想要的数组:
['ABC', '123', 'DEF']
关于java - 如何使用java从XML读取父节点的子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29080161/