1

次のXMLでは、2番目ではなく最初のタイトルタグのコンテンツを取得できるようにしたいと思います。残念ながら、コードは両方のタイトルタグのコンテンツを出力します...

どんな助けでも大いに感謝します!

String feedXMLString = "<entry><title>title 1</title><source><title>title 2</title></source></entry>";
    Document feedXML = Jsoup.parse(feedXMLString);

    NodeTraversor feedXMLTraversor = new NodeTraversor(new NodeVisitor() {

          @Override
          public void tail(Node node, int depth) {
              if (node instanceof Element) {

                  String tagName = ((Element) node).tagName();                    
                  String parentTagName = ((Element) node).parent().tagName();

                  if (tagName.equals("title")) {          
                      if (parentTagName.equals("entry")) {
                          String title = ((Element) node).ownText();
                          System.out.println(title);
                      }
                  }
              }
          }

          @Override
          public void head(Node node, int depth) { 
          }
        });
    feedXMLTraversor.traverse(feedXML.body());

出力は

title 1
title 2

タイトル1にしたいだけです。2番目のタイトルの親タグを想定して作業しています<source>が、どういうわけかJSoupはそうだと思っているようです。<entry>

ありがとう!

ありがとう!

4

2 に答える 2

2

Jsoup APIのセレクター部分を使ってみませんか?それははるかに使いやすく、よりクリーンであり、私はそれもより速いと確信しています。私が個人的に使用するのはこれです:

//The line you already had
Document doc = Jsoup.parse(feedXMLString);

//This will get you all the titles
Elements elems = doc.select("title");

//And now you can proceed in various ways:
String title1stWay = elems.first().text();
String title2ndWay = elems.get(0).text();

こちらをご覧ください:Jsoup Selector API

于 2012-06-05T11:16:10.853 に答える
1

追加してみてください(以下 String tagName ,String parentTagName...

int numOfParents = ((Element) node).parents().size();

と変化

if (parentTagName.equals("entry"))

の中へ

if (parentTagName.equals("entry") && (numOfParents == 1))

于 2012-06-05T05:11:08.563 に答える