我在用 VTD-XML 要用Xpath表达式解析一些XML文件,现在出现了以下内容:我需要知道XML树中节点的索引,经过一点搜索,我发现这样的表达式
VTD-XML
count(//ds[name='cpu1']/preceding-sibling::*)+1
为我提供所需的索引-我的问题是:到目前为止,我正在使用VTD-XML(因为它的速度很快),是否有可能在 VTD-XML格式 ? 使用给定的表达式只会导致XpathParseException。
VTD-XML格式
我的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完全符合W3C XPath 1.0建议。它支持所有内置功能。它也 支持许多XPath 2.0函数。
因此,如果VTD-XML拒绝有效的XPath 1.0表达式,那么VTD-XML中似乎有一个bug。但问题可能出在XPath表达式中,也可能出在使用VTD-XML的代码中。
您给出的XPath表达式似乎有效。但它的效率不高,所以在VTD-XML中可能有更好的方法来实现这一点,而不使用XPath。例如,查看输入记录并计数,直到到达 ds 名为的元素 cpu1 .
ds
cpu1