我有一个XML文档和一些可以用来从中提取数据的路径。
示例路径:
Bill/Id
Bill/Line/AccountBasedExpenseLineDetail
棘手的部分是我需要从同一个"区域提取每个数据点"该文件。例如,如果给我这样的文件:
<Bill domain="QBO" sparse="false">
<Line>
<AccountBasedExpenseLineDetail>
1
</AccountBasedExpenseLineDetail>
</Line>
</Bill>
<Bill domain="QBO" sparse="false">
<Id>148</Id>
</Bill>
我实际上需要在上面的路径中返回任何内容,因为<AccountBasedExpenseLineDetail>
和<Id>
标记位于不同的<Bill>
标记内。
但是,如果文件看起来像这样:
<Bill domain="QBO" sparse="false">
<Id>148</Id>
<Line>
<AccountBasedExpenseLineDetail>
1
</AccountBasedExpenseLineDetail>
</Line>
</Bill>
我会为Bill\Id
路径返回148,为Bill/Line/AccountBasedExpenseLineDetail
路径返回1,因为它们都包含在同一个Bill
对象中。
这非常棘手,因为要求适用于更复杂的表以及深层嵌套对象。我是否缺少一些XPath功能,可能会使这个问题更容易一些?就目前而言,我可以想到一个相当复杂的递归解决方案,但如果我错过了一些明显的东西,我不想开始研究它。
答案 0 :(得分:1)
这个XPath,
/Bill[Line/AccountBasedExpenseLineDetail]/Id
仅当Id
具有Bill
子元素且其自身具有Line
子元素时,才会返回AccountBasedExpenseLineDetail
元素。
和这个XPath,
/Bill[Id]/Line/AccountBasedExpenseLineDetail
仅当AccountBasedExpenseLineDetail
具有Bill
子元素时,才会返回Id
元素。