使用XPath从文档中的特定位置提取元素

时间:2016-10-20 16:36:59

标签: xml xpath

我有一个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功能,可能会使这个问题更容易一些?就目前而言,我可以想到一个相当复杂的递归解决方案,但如果我错过了一些明显的东西,我不想开始研究它。

1 个答案:

答案 0 :(得分:1)

这个XPath,

/Bill[Line/AccountBasedExpenseLineDetail]/Id
仅当Id具有Bill子元素且其自身具有Line子元素时,

才会返回AccountBasedExpenseLineDetail元素。

和这个XPath,

/Bill[Id]/Line/AccountBasedExpenseLineDetail
仅当AccountBasedExpenseLineDetail具有Bill子元素时,

才会返回Id元素。