2010-11-24 94 views
2

我使用VTD-XML来解析一些带有Xpath表达式的XML文件,现在显示如下:我需要知道xml树中某个节点的索引,搜索,我发现,像这样Xpath和VTD-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

你能告诉我们代码吗?在其中您尝试使用上述XPath表达式,并给出了一个分析错误。 – LarsH 2010-11-24 12:16:10

回答

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。例如。通过输入记录并计数,直到找到名称为cpu1ds元素。