java - Xpath 和 VTD-XML,获取节点索引

标签 java xml xpath vtd-xml

我正在使用 VTD-XML 来解析一些带有 Xpath 表达式的 XML 文件,现在出现了以下内容:经过一些搜索后,我需要知道 xml 树中节点的索引我发现像这样的表达

count(//ds[name='cpu1']/preceding-sibling::*)+1

为我提供了所需的索引 - 我的问题是:到目前为止,我正在使用 VTD-XML(因为它很快)是否有可能在 VTD-XML 中使用这种表达式?使用给定的表达式只会导致 XpathParseException。

我的 xml 看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<rrd>
    <version>0003</version>
    <step>5</step>
    <lastupdate>1290585118</lastupdate>
    <ds>
        <name>cpu1</name>
        <type>DERIVE</type>
        <minimal_heartbeat>300.0000</minimal_heartbeat>
        <min>0.0</min>
        <max>1.0000</max>
        <last_ds>69375.6708</last_ds>
        <value>0.0001</value>
        <unknown_sec>0</unknown_sec>
    </ds>
    <ds>
        <name>cpu0</name>
        <type>DERIVE</type>
        <minimal_heartbeat>300.0000</minimal_heartbeat>
        <min>0.0</min>
        <max>1.0000</max>
        <last_ds>69375.6708</last_ds>
        <value>0.0001</value>
        <unknown_sec>0</unknown_sec>
    </ds>
...

最佳答案

根据FAQ ,

VTD-XML fully conforms with W3C XPath 1.0 recommendation. It supports all the built-in functions. It also supports many XPath 2.0 functions.

因此,如果 VTD-XML 拒绝有效的 XPath 1.0 表达式,则 VTD-XML 中似乎存在错误。但问题可能出在 XPath 表达式中,或者出在使用 VTD-XML 的代码中。

您提供的 XPath 表达式似乎是有效的。虽然它不是很有效,所以可能有更好的方法在 VTD-XML 中执行此操作,而无需使用 XPath。例如。遍历输入记录并计数,直到到达名称为 cpu1ds 元素。

关于java - Xpath 和 VTD-XML,获取节点索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4265196/

相关文章:

python - ElementClickInterceptedException : Message: element click intercepted: Element <label> is not clickable with Selenium and Python

java - Android 2.2 上的 Admob 6 无法正常工作

java - 为什么使用迭代器而不是 for 循环?

java - 找不到元素 'resources'的声明

xml - 查询 : how to get the previous element than the one chosen in an XML file?

xml - SoapUI:在一个断言中有多个预期结果

java - 解析 XML 文件崩溃时要评估 1 个以上的表达式

python - 无法使用xpath从某些html元素解析某些信息

java - 从 Activity 访问 Fragment 的 View

java - 如何在 grails/java 中将 PNG 转换为 jpeg