如何检测XPath表示叶节点或节点集?

时间:2014-08-14 12:40:31

标签: java xml xpath

我有以下xml示例文件,我将使用XPath获取数据(XPath是随机提供的,无法识别XPath是否代表叶节点或节点集)。

叶节点xpath的示例: - / OrderResponse / OrderLine [2] / LineItem / ID

节点集xpath的示例: - / OrderResponse / OrderLine

有没有办法检测xpath表示使用java的叶元素或节点集?

<OrderResponse>
    <ID>79858</ID>
    <IssueDate>2011-05-04</IssueDate>
    <OrderLine>
        <LineItem>
            <ID>1</ID>
            <SalesOrderID>1</SalesOrderID>
            <Note>tCP</Note>
            <LineStatusCode>1</LineStatusCode>
            <Quantity unitCode="PCE">1.0</Quantity>
        </LineItem>
    </OrderLine>
    <OrderLine>
        <LineItem>
            <ID>2</ID>
            <SalesOrderID>2</SalesOrderID>
            <LineStatusCode>2</LineStatusCode>
            <Quantity unitCode="PCE">2.0</Quantity>
        </LineItem>
    </OrderLine>
</OrderResponse>

1 个答案:

答案 0 :(得分:1)

这两个XPath都选择了节点集,但是从你的问题中可以清楚地知道节点集&#34;你的意思是&#34;非叶子节点集&#34;。

显然,通过查看XPath是否会选择叶子节点,非叶节点,两者都没有,或者根本没有任何东西,但是你无法判断,但是你可以这样做:

做两个XPath选择,一个用于( TheOriginalXPath )+ [*],另一个用于( TheOriginalXPath )+ [not(*)],所以:

/OrderResponse/OrderLine[2]/LineItem/ID[*]

/OrderResponse/OrderLine[2]/LineItem/ID[not(*)]
  • 如果只有第一个查询返回结果,则节点是非叶元素
  • 如果只有第二个查询返回结果,则节点为叶节点
  • 如果两者都返回结果,则XPath匹配叶节点和非叶元素的混合
  • 如果两者都没有返回结果,则XPath不匹配任何内容