Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.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
Php Xpath保留分隔线和其他html标记_Php_Dom_Xpath_Web Scraping - Fatal编程技术网

Php Xpath保留分隔线和其他html标记

Php Xpath保留分隔线和其他html标记,php,dom,xpath,web-scraping,Php,Dom,Xpath,Web Scraping,以下是html页面的来源: <h3>Background</h3> <p>Example 1<br>Example 2<br> </br> <ul></li>ABC<li></ul> </p> <h3>Job Description</h3> <p>content of job description</p> 我需要

以下是html页面的来源:

<h3>Background</h3>
<p>Example 1<br>Example 2<br> </br> <ul></li>ABC<li></ul>
</p>
<h3>Job Description</h3>
<p>content of job description</p>
我需要这个输出:

<p>Example 1<br>Example 2<br> </br> <ul></li>ABC<li></ul>
    </p>
示例1
示例2

  • ABC

使用simple,您需要执行以下操作:

$html = str_get_html($str);

foreach($html->find('h3') as $h3){
  if($h3->text() == 'Background'){
    echo $h3->next_sibling();
  }
}
// <p>Example 1<br>Example 2<br> </br> <ul></li>ABC<li></ul>  </p>
$html=str\u get\u html($str);
foreach($html->find('h3')作为$h3){
如果($h3->text()=='Background'){
echo$h3->next_sibling();
}
}
//示例1
示例2

  • ABC

使用
Dom
Xpath
无法到达那里,因为html太无效(
ul
p
的内部)

这一行修复了代码。现在它保留了断线标记和
  • 标记

    //node()[preceding::h3[text()="Background"] and following-sibling::h3[text()="Job Description"]]/node()'
    

    我在字符串末尾添加了/node()。

    请发布所有相关的HTML。显然,您遗漏的“职务描述”中肯定有某些内容。您提出的查询正是返回此输出。如果不是,那可能是因为您使用的HTML解析器正在以另一种方式解析凌乱的HTML(在开始之前先结束列表项标记)。您是如何解析HTML的?如果转储解析后的HTML会发生什么?@JensErat它不会返回所有标记 ,
      标记返回,但剩余的:

    • 丢失。它看起来是这样的:
      示例1示例2
        ABC

      您的查询实际上应该只返回一个节点,即包含整个子树的段落。您的XPath表达式没有问题,但解析的HTML有问题。在将其解析为HTML之前,您以后可能会更幸运。@JensErat我保存了源页面并进行了修复。我试过清理过的文件,但结果还是一样。这里是源页面链接:
      http://www.acbar.org/display-job/49262
      ul标签正在提取,但不是ul下的li。我用另一页测试这个,ul不在p下,但仍然不工作。和表标记一样,我可以得到表的标记,但不能得到表的子标记。
      //node()[preceding::h3[text()="Background"] and following-sibling::h3[text()="Job Description"]]/node()'