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

任何帮助将非常感谢!

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>

谢谢!

谢谢!

最佳答案

为什么不使用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

关于java - 在JSoup中获取基于父元素的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10891730/

10-12 07:08