如何使用java从XML读取父节点的子节点

时间:2015-03-16 15:04:55

标签: java xml xpath expression

 <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()");

请在“发票”节点和“代码”的案例编号中给出一般答案  节点很高

1 个答案:

答案 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']