代码之家  ›  专栏  ›  技术社区  ›  onigunn

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

  •  2
  • onigunn  · 技术社区  · 14 年前

    我在用 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 回复  |  直到 14 年前
        1
  •  2
  •   LarsH    14 年前

    根据 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 .