java - 如何检测XPath代表的是叶节点或者节点集?

标签 java xml xpath

我有下面的 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/

相关文章:

c# - 使用 LINQ 查询 XML 并在不存在的情况下使用 null 代替特定的 xml 属性

javascript - XML/XSL 和 Javascript 购物车

xml - xpath - 获取所选集合的前 10 个项目

java - Hibernate:两个 OneToMany 属性,由具有不同列的同一实体映射

基于 Java 的开源 VNC 应用程序或库

java - JAVA/Android中从字符串中提取多个子字符串

c++ - Qt C++ XML 意外字符

.net - 我可以使用Web Deploy将元素插入web.config吗?

java - 如何在 selenium Web 驱动程序中获取跨度类值的属性

java - 有没有办法在没有 persistence.xml 的情况下为 Spring 的 LocalContainerEntityManagerFactoryBean 提供 persistenceUnitName?