我有下面的 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>
最佳答案
这两个 XPath 都选择节点集,但从您的问题中可以清楚地看出,“节点集”指的是“非叶节点集”。
显然,仅通过查看 XPath 无法判断它是否会选择叶节点、非叶节点、两者或什么都不选择,但您可以这样做:
进行两项 XPath 选择,一项用于 (TheOriginalXPath) + [*]
,另一项用于 (TheOriginalXPath) + [不是(*)]
,所以:
/OrderResponse/OrderLine[2]/LineItem/ID[*]
和
/OrderResponse/OrderLine[2]/LineItem/ID[not(*)]
- 如果只有第一个查询返回结果,则节点为非叶子元素
- 如果只有第二个查询返回结果,则该节点为叶子节点
- 如果两者都返回结果,则 XPath 匹配叶节点和非叶元素的混合
- 如果两者都没有返回结果,则 XPath 不匹配任何内容
关于java - 如何检测XPath代表的是叶节点或者节点集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25308305/