3

私は例えばこのようなxmlファイルを持っています

<root>
 <test>
  <bla>test1</bla>
 </test>
 <test>
  <bla>test2</bla>
 </test>
 <test>
 </test>
</root>

ここで、XPath式を使用してvtd-xml-parserで解析します。testまず、タグを検索します

VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("//test");

testこのタグ内でblaタグを検索したい

int result = -1;
int count = 0;

while ((result = ap.evalXPath()) != -1) {
 // evaluate XPath Expressions within the test tags
}

誰かがこの表現の作り方を教えてもらえますか?タグをタグblaに割り当てられるようにしたいので、ドキュメント全体でタグを検索したくありません。たとえば、タグが空で、ドキュメント全体でタグを検索する場合、これを行うことはできません。blatestblabla

4

4 に答える 4

3

別の自動操縦(以下に表示)を宣言できますが、これが常に最も簡単な方法であるとは限りません。

AutoPilot ap2 = new AutoPilot(); ap2.selectXPath("blah");

次に、それをループにネストします

while ((result = ap.evalXPath()) != -1) {
 // evaluate XPath Expressions within the test tags
  int i2=-1;
  while((i2=ap2.evalXPath())!=-1){
     // do more stuff here
  }
}

ただし、2番目のxpathは相対xpath式である必要があります。

于 2009-11-19T21:34:56.003 に答える
2

最初の段落は、これが必要であることを示しているようです。

//test/bla

ただし、最後の段落は、何か別のものが必要であることを示しているようです。

于 2009-11-19T12:15:00.370 に答える
1

VTD-XMLを学んでいる人のために 、VTD開発者自身によって書かれたhttp://www.codeproject.com/Articles/28237/Programming-XPath-with-VTD-XMLの優れたプログラミング方法の記事があります。

これはホームページで見つかりませんでしたが、起動するのに大いに役立ちます。

于 2013-01-02T15:55:42.843 に答える
1

これは、2つのxpathを使用する代わりの方法です。1つのxpathを使用して「test」タグを取得してから、ループを使用して「bla」タグを探している子を反復処理します。

VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("//test");

while (ap.evalXPath() != -1) {
    System.out.println("Inside Test tag");

    //now find the children called "bla"
    if(vn.toElement(VTDNav.FIRST_CHILD, "bla")){
    do{
        int val = vn.getText() ;
        if(val!=-1){
        String value = vn.toNormalizedString(val);
        System.out.println("\tFound bla: " + value);
        }
    }
    while(vn.toElement(VTDNav.NEXT_SIBLING, "bla"));
    }
    //move back to parent
    vn.toElement(VTDNav.PARENT);
}
于 2010-08-13T08:28:19.097 に答える