我正在使用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>
...发布于 2010-11-24 20:29:58
根据FAQ的说法
XML
完全符合W3C XPath 1.0推荐标准。它支持所有的内置函数。它还支持许多XPath 2.0函数。
因此,如果VTD-XML拒绝有效的XPath 1.0表达式,那么VTD-XML中似乎存在错误。但是问题可能出在XPath表达式中,或者出现在使用VTD-XML的代码中。
您给出的XPath表达式似乎是有效的。但是效率不是很高,所以在VTD-XML中可能有一种更好的方法来做到这一点,而不是使用XPath。例如,遍历输入记录并进行计数,直到得到名为cpu1的ds元素。
https://stackoverflow.com/questions/4265196
复制相似问题