1

在下面的 XML 中,我希望能够获取第一个标题标签的内容,而不是第二个。不幸的是,代码打印了两个标题标签的内容......

任何帮助都会非常感谢!

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。我假设第二个标题的父标签是<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 选择器 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 回答