2

VTD-XMLXpath 式でいくつかの 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>
...
4

1 に答える 1

2

よくある質問によると、

VTD-XML は、W3C XPath 1.0 勧告に完全に準拠しています。すべての組み込み関数をサポートしています。また、多くの XPath 2.0 関数もサポートしています。

したがって、VTD-XML が有効な XPath 1.0 式を拒否している場合、VTD-XML にバグがあるように見えます。しかし、問題は XPath 式、または VTD-XML を使用するコードにある可能性があります。

指定した XPath 式は有効なようです。ただし、あまり効率的ではないため、XPath を使用せずに VTD-XML でこれを行うためのより良い方法があるかもしれません。dsたとえば、入力レコードを調べて、名前が の要素に到達するまでカウントしますcpu1

于 2010-11-24T12:29:58.077 に答える