2011-07-27 4 views
5

JavaでVTD(私はVTD-XMLと思われる)を使い始めました。私が今どこにデータを挿入することで問題に当たっているのですか?私は次のことをやっているとしましょう:JavaでのVTD-XML - XMLModifier.insertAfterElementの後のインデックスの検索

VTDNav nav = preExistingGen.getNav(); 
AutoPilot pilot = new AutoPilot(nav); 
pilot.selectXPath("/Something/SomethingElse"); 
if (pilot.evalXPath() != -1) { 
    XMLModifier modifier = new XMLModifier(nav); 
    modifier.insertAfterElement("<some>content</some>"); 
} 

私が想定していた何をすることは、これはVTDNavに反映されるリアルタイム更新、でした。要素の内容を単に挿入するだけでナビに何もしないので、私の理解が間違っているように見えます(VTDNavを出力すると、元のXMLがまだ含まれています)。新しいxmlのハンドルを得ることができる唯一の方法は、XMLModifierから出力することです。

modifier.outputAndReparse(); // Gives me a new VTDNav with the new content 

私はここに欠けている何かがありますか?これを行う簡単な方法はありますか?新しいコンテンツを挿入してすぐに新しいインデックスを取得できるようにしたかったのです。私の既存のコード(標準的なDOMクラスを使用して)は、挿入と更新のトンを持っており、また、最後に挿入された要素が文書のどこに存在しているかを知る必要があります。毎回outputAndReparse()を実行し、挿入された要素(私が保証することさえできないかもしれません)を見つけることは、もっともらしい解決策のようには見えません。

+1

私はどこでも見つけることができる素晴らしいソリューションはないように見えます。私のコードは新しいドキュメントの作成を扱っているので、vtdを使って入力ドキュメントの読み込みを行い、DOMを使って出力ドキュメントの書き込みを行います。 – jpcamara

+0

+1と私はまた、VTDを使用してドキュメントを読んでナビゲートすることに決めましたが、DOMを使ってそれを変更しました。 –

答えて

0
modifier.remove(): 

xpaths、valのno.batが格納されているテキストファイル内にあるので、各xpathに対して1つの新しい出力xxx.xmlファイルを生成します。 xml修飾子の前のデータを現在のデータと一緒に使用すると、xxx.xmlファイルに書き込まれます。これにより、以前のデータが消去され、現在のxpathデータのみが新しいxxx.xmlファイルに書き込まれます。そのため、modifier.remove( );

xm2.output(new FileOutputStream("/home/cupola-hadoop-project/TotalEnvironment/document/link/"+j+"101new.xml")); 
xm2.remove(); 

ループを希望の回数回します。

+1

申し訳ありませんが、私はこの答えを理解していません。 また、XMLModifier.remove()の説明を読み取ると、「マスターXML文書からコンテンツを削除する」という結果が得られました。私は完全な文書と、新しいコンテンツをナビゲート可能にする必要があります - その点について私が不明だったのかもしれません。しかし、入力をありがとう! – jpcamara

2

答えは、あなたの変更とそれに続く新しいコンテンツへのアクセスを慎重に計画することだと思います。新しいコンテンツを挿入した後すぐに新しいコンテンツにアクセスしようとすると、insertAndParse()が移動する方法です。しかし、あなたが見ることができるように、それは再解析のためにかなり遅いです。私の提案は、一度にすべてを挿入するように計画してから、一度だけ再解析を呼び出すことです。この方法ではるかに効率的になります。

VTD-XMLはDOMにしようとしているわけではなく、独自の長所と短所を持っています...これは弱点の1つですが、それを回避することができます... そして、複数のxmlファイルをマージするには、vtd-xmlが確実に輝きます。

また、この質問にvtd-xmlタグを付けると、もっと簡単に見つけることができます。

関連する問題