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

Java 如何检测表示叶节点或节点集的XPath?,java,xml,xpath,Java,Xml,Xpath,下面是xml示例文件,我将使用XPath获取数据(XPath是随机给出的,无法识别XPath是表示叶节点还是节点集) 叶节点xpath示例:-/OrderResponse/OrderLine[2]/LineItem/ID 节点集xpath的示例:-/OrderResponse/OrderLine 有没有一种方法可以使用java检测表示叶元素或节点集的xpath <OrderResponse> <ID>79858</ID> <IssueDa

下面是xml示例文件,我将使用XPath获取数据(XPath是随机给出的,无法识别XPath是表示叶节点还是节点集)

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

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

有没有一种方法可以使用java检测表示叶元素或节点集的xpath

<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>

79858
2011-05-04
1.
1.
tCP
1.
1
2.
2.
2.
2

这两个XPath都选择节点集,但从您的问题中可以清楚地看出,“节点集”是指“非叶节点集”

显然,仅仅通过查看XPath无法判断它是否会选择叶节点、非叶节点,或者两者都选择,或者什么都不选择,但是您可以这样做:

执行两个XPath选择,一个用于(TheOriginalXPath)+
[*]
,另一个用于(TheOriginalXPath)+
[not(*)]
,因此:

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

  • 如果只有第一个查询返回结果,则节点是非叶元素
  • 如果只有第二个查询返回结果,则节点是叶节点
  • 如果两者都返回结果,则XPath将匹配叶节点和非叶元素的混合
  • 如果两者都不返回结果,则XPath不匹配任何内容

这正是我所期望的。。非常感谢你帮了我的忙!
/OrderResponse/OrderLine[2]/LineItem/ID[not(*)]