Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不调用直接父级的情况下解析HTML_Java_Html_Parsing_Jsoup - Fatal编程技术网

Java 如何在不调用直接父级的情况下解析HTML

Java 如何在不调用直接父级的情况下解析HTML,java,html,parsing,jsoup,Java,Html,Parsing,Jsoup,我想用jsoup解析这个HTML,但是我需要在不使用“更改类名”类的情况下提取标题和副标题,因为类名总是在更改。我只需要“h1”属性和“p”中的文本 Html: <header class="my header"> <div class="row"> <h3>I don't want this </h3> <div class="Changing class name"> <

我想用jsoup解析这个HTML,但是我需要在不使用“更改类名”类的情况下提取标题和副标题,因为类名总是在更改。我只需要“h1”属性和“p”中的文本

Html:

<header class="my header">
   <div class="row">
      <h3>I don't want this      </h3>
      <div class="Changing class name">
         <h1>The headline             </h1>
         <p class=" my subtitle">
            The subtitle
         </p>
      </div>
   </div>
</header>

我不要这个
标题

副标题


我想发表评论,但现在还不能

我知道有一个函数
getElementsByTag()
,可以用来获取
的每个元素,因此如果您知道只有标题在使用
,可以使用这个函数

您也可以使用
select()
()来选择标题或例如副标题
您没有说副标题的类发生了变化,因此我假设您可以查询my subtitle类的
标记,我们可以这样使用getElementsByTag:

String MyTitle = doc.getElementsByTag("h1").get(0).text();
或者我们可以通过这种方式使用select(工作速度更快):

关于副标题,我添加了一个检查,以避免在字符串中输入NULL:

Element Subtitle = doc.select("p.my").first();
if (Subtitle != null) {
    String MySubtitle = doc.select("p.my").text().trim();}

我不太了解JSoup,但是如果您不想使用该类,您可能必须确保结构始终相同,然后通过它们的路径访问元素,即
header.div.div.h1
header.div.div.p
(如果有多个div,您可能还需要一个常量索引)。谢谢。部分工作正常。我忘了提到,但有时有些文章没有副标题,所以当我执行String articlessubtitle=doc.getElementsByTag(“p”).get(0.text();这里没有“p”我得到了例外好吧,你可以检查列表或者你从getElementsByTag()得到的任何东西的大小是否大于0,基于这个get(0)与否,我不知道我真的不喜欢整个站点的解析,它感觉是如此静态和错误。它的返回值为NULL,所以我在将其保存为字符串之前添加了一个检查
Element Subtitle = doc.select("p.my").first();
if (Subtitle != null) {
    String MySubtitle = doc.select("p.my").text().trim();}