我正在使用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>
...
答案 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}}元素。