私の組織では、大きなxml変換を行うためにxslt 1.0とxpath 1.0を使用しています。しかし今、私たちはマイグレーションを行う必要があります。VTD-XMLで多くのAutoPilotオブジェクトインスタンスを作成/渡す方法は?
私は巨大なXMLの200メガバイトを解析して変換するVTD-XMLを使用していると私は私が定義したいそれらのそれぞれのためのように、20以上のxpathが選択されてい:
AutoPilot relationAutoPilot = new AutoPilot();
relationsautoPilot.selectXPath("object[@class='Example']");
AutoPilot first= new AutoPilot();
first.selectXPath("other");
....
public void methodCalulate(final VTDNav partAutoPilot, final AutoPilot partAutoPilot, final AutoPilot first, final AutoPilot second,final AutoPilot third,final AutoPilot fourth) {
navigator.push();
partAutoPilot.bind(navigator);
while ((i = partAutoPilot.evalXPath()) != -1) {
...
method3(navigator,first,second,third,fourth);
..
}
method3(final VTDNav navigator,final AutoPilot first, final AutoPilot second,final AutoPilot third,final AutoPilot fourth) {
navigator.push();
first.bind(navigator);
int i = -1;
while ((i = first.evalXPath()) != -1) {
//Do some buissiness logic
method2(navigator,second,third,fourth);
..
}
}
だから私はそれらを入れてみましたwhile、for-eachなどではなく、プロセッサの速度とメモリを消費することはできませんが、問題があります。
シンプルなケース
public void methodCalculate(final VTDNav navigator, final AutoPilot partAutoPilot)
OK 1つのオートパイロットOK:私はので、オブジェクトを渡す方法を疑問に思って。
より複雑ケース methodCalculateはmethod3-を呼び出す> method2-を呼び出す>方法1
public void methodCalculate(final VTDNav navigator, final AutoPilot partAutoPilot, final AutoPilot first,final AutoPilot second,final AutoPilot third,final AutoPilot fourth){ method3(navigator,first,second,third,fourth); } public void method3(final VTDNav navigator,final AutoPilot second,final AutoPilot third,final AutoPilot fourth){ method2(navigator,second,third,fourth); } ....
を呼び出し、すべての方法は、私は副相対のXPathで選択を必要と変換のための新しい規則があっても4つのオートパイロットを渡す必要があります。method_0が来ることがあります。私は追加のオートパイロットを追加する必要があります。 このような状況でどのように進めるのでしょうか?どのようにAutoObjectsをより効率的に渡すのですか?多くのメモリを消費し、その計算が非常に高価なためです。
私は何を試していますか? methodCalulateが呼び出されるメソッドの最上位からAutoPilotを抽出して、一度作成するようにします。また、methodCalulateでは他のオートパイロットを作成します。速度は向上しますが、オートパイロットを作成する次のインラインコールではパフォーマンスが低下します。
編集: 私はAutoPilotを使ってリストを追加することもできますし、地図とキーの定数クラスを使って、特定のオートパイロットを検索することもできます。私はここで何が最善の選択肢か分からない。
すべてのautoPilotオブジェクトのトップレベルストレージとして配列またはarrayListを使用することを検討しましたか?あなたはループからxpathコンパイルを取る正しい道に...私が言うことができる限り... –
質問投稿にもっと具体的にしてください...私はあなたにアドバイスを与えることができます、またはより良いコード例あなたがvtd-xmlにしたいことの詳細例を投稿できるのであれば... –
私はこの問題を解決する方法のアドバイスを探しています。パスを渡す場合どのxpathオートパイロットが必要なのかわからないのですか? もっと正確にするには?私はxsltのような変換を行いたいが、VTD-XMLでjavaを使うと、xpath selectに基づいて最初のレベルのオブジェクトを反復し始め、次に属性、サブ要素などを反復処理する。レベルが上がれば、新しいオートパイロットで新しい選択が必要になります。 Aが私の質問を編集します。 – Xelian