获取节点索引的Xpath和VTD-XML

时间:2010-11-24 09:26:29

标签: 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>
...

1 个答案:

答案 0 :(得分:2)

根据FAQ

  

VTD-XML完全符合W3C XPath   1.0推荐。它支持所有内置功能。它也是   支持许多XPath 2.0函数。

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

您提供的XPath表达式似乎有效。但它效率不高,因此在VTD-XML中可能有更好的方法,而不使用XPath。例如。浏览输入记录并计算,直到找到名称为ds的{​​{1}}元素。