<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] = ABC invoice [1] .code [2] = 123 invoice [2] .code [1] = DEF。如何在JAVA中使用XPathExpression执行此操作。下面是我的xpath表达式,它不起作用。
expr = xpath.compile("//invoices/invoice/obs/ob/code/text()");
请在“发票”节点和“代码”的案例编号中给出一般答案 节点很高
答案 0 :(得分:1)
您的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']