HTML 文档的 PHP XPATH 省略所有标签。我想保留它们

ube*_*web 5 html php tags string xpath

我正在使用 XPATH 解析 HTML 文档,并且我想保留所有内部 html 标签。

所讨论的 html 是一个包含许多列表元素的无序列表。

<ul id="adPoint1"><li>Business</li><li>Contract</li></ul>
Run Code Online (Sandbox Code Playgroud)

我正在使用以下 PHP 代码解析文档

$dom = new DOMDocument();
@$dom->loadHTML($output);
$this->xpath = new DOMXPath($dom);
$testDom = $this->xpath->evaluate("//ul[@id='adPoint1']");
$test = $testDom->item(0)->nodeValue;
echo htmlentities($test);
Run Code Online (Sandbox Code Playgroud)

由于某种原因,输出总是省略 html 标签。我认为这是因为 XPATH 不打算以这种方式使用,但是有没有解决这个问题的方法?

我真的很想继续使用 XPATH,因为我已经使用它来解析页面的其他区域(单个 a href 元素),没有任何问题。

编辑:我知道有一种更好的方法可以通过迭代 UL 的子元素来获取数据。页面中有一个更复杂的部分我也想解析(javascript 块),但我试图提供一个更容易理解的示例。

我想要的实际代码块是

<script language="javascript">document.write(rot_decode('<u7>Pbagnpg Qrgnvyf</u7><qy vq="pbagnpgQrgnvyf"><qg>Cu:</qg><qq>(58) 0078 8455</qq></qy>'));</script>
Run Code Online (Sandbox Code Playgroud)

它的问题是省略了所有结束标签但保留了开始标签。我猜这是因为 XPATH 试图解析内部元素而不是仅仅将其视为字符串。

如果我尝试选择脚本元素

$testDom = $this->xpath->evaluate("//div[@id='businessDetails']/script");
$test = $testDom->item(0)->nodeValue;
echo htmlentities($test);
Run Code Online (Sandbox Code Playgroud)

我的输出将是,您可以看到缺少所有结束标签。

document.write(rot_decode('<u7>Pbagnpg Qrgnvyf<qy vq="pbagnpgQrgnvyf"><qg>Cu:<qq>(58) 0078 8455'));
Run Code Online (Sandbox Code Playgroud)

ube*_*web 3

我认为 XPATH 不适合我想要的,现在使用PHP Simple HTML DOM Parser,它更适合该任务。

它可以很好地保持内部 html 格式。

foreach($this->simpleDom->find('script[language=javascript]') as $script) {
        echo htmlentities($script->innertext());
}
Run Code Online (Sandbox Code Playgroud)