2010-11-24 11 views
2

私はVTD-XMLを使用してXpath式でいくつかのXMLファイルを解析しています。次のようになりました。xmlツリーからノードのインデックスを知る必要があります。私の知る限りVTD-XMLを使用しています(その速いので)内の式のこの種を使用する可能性があります:私の質問は - 私はこのXpathとVTD-XML、ノードインデックスを取得する

count(//ds[name='cpu1']/preceding-sibling::*)+1 

のような表現は私に必要なインデックスを提供することを見つけ検索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

+0

これに加えて、XPathエンジンに関連する質問が書かれています。*ノードのインデックスを知る必要があります*。しかし、あなたのXPath式は絶対式なので、コンテキストに依存しません。 –

+0

ノードインデックスはDOMではなくvtd-xml特有の概念です.xpathはXMLの基礎となるデータ表現に不可知論的であることを忘れないでくださいAutoPilotのevalXPath()以外のノードインデックスを取得してノードインデックスを取得することはできません。 –

答えて

2

FAQによると、

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

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

指定したXPath式が有効であるようです。しかしそれほど効率的ではありませんので、XPathを使用せずにVTD-XMLでこれを行うより良い方法があります。例えば。あなたの名前がcpu1ds要素に達するまで、入力レコードを調べて数えます。

関連する問題