2

我正在使用VTD-XMLXpath 表达式解析一些 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>
...
4

1 回答 1

2

根据常见问题解答

VTD-XML 完全符合 W3C XPath 1.0 建议。它支持所有内置功能。它还支持许多 XPath 2.0 函数。

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

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

于 2010-11-24T12:29:58.077 回答