【问题标题】:Jsoup: How to select direct parents until the root without their siblings?Jsoup:如何选择直接父母直到没有兄弟姐妹的根?
【发布时间】:2017-12-11 04:53:22
【问题描述】:

我正在尝试获取 element 的所有直接父母,但也获取他们的兄弟姐妹。

例如,我有这个 DOM 结构...

<div class="html">
  <div class="head"></div>
  <div class="body">
    <a href="seznam.cz">seznam</a>
    <h2>Foo</h2> 
    <a href="google.com">google</a> 
    <p>
      <img class="first">
    </p>
    <img class="second"> 
    <ol>
      <li>1</li>
      <li>2</li>
    </ol>
  </div>
</div>

所以我想得到 img 元素的所有直接父级 first 直到 divhtml .

我试过使用下面的代码

Element element = document.select("img").first();
Node root = element.root();

但在 root var 中,我也得到了所有兄弟姐妹的整个 DOM 结构。

更新

在 root var 之后,我又拥有了整个 DOM 结构:

<div class="html">
  <div class="head"></div>
  <div class="body">
    <a href="seznam.cz">seznam</a>
    <h2>Foo</h2> 
    <a href="google.com">google</a> 
    <p>
      <img class="first">
    </p>
    <img class="second"> 
    <ol>
      <li>1</li>
      <li>2</li>
    </ol>
  </div>
</div>

但我想要这样的东西:

<div class="html">
  <div class="body"> 
    <p>
      <img class="first">
    </p>
  </div>
</div>

【问题讨论】:

  • 您能否在您的问题中添加更多明确性?
  • 我更新了我的问题。更清楚了吗?

标签: java html dom jsoup parent


【解决方案1】:

如果您只对路径感兴趣,请使用Element.cssSelector()

它为您提供完整的 DOM 路径,例如html &gt; body &gt; img

Darshit Chokshi 方法返回的“路径”不是唯一的。

【讨论】:

  • 谢谢,这就是我想要的。
【解决方案2】:

首先使用类名'first'获取所有元素,

Elements childs = document.getElementsByClass("first");

现在,迭代所有子元素以获取它们的父元素,

    for( Element child : childs){
      Elements parents = child.parents();
      for(Element parent: parents){
        System.out.println(parent.tagName());
      }
    }

试试这个,希望它对你有用;)

【讨论】:

  • 感谢您的愿意,但 lukyer 的回答更有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
相关资源
最近更新 更多