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