【发布时间】:2009-10-13 06:14:46
【问题描述】:
我正在使用 XPATH 解析 HTML 文档,我想保留所有内部 html 标记。
有问题的 html 是一个包含许多列表元素的无序列表。
<ul id="adPoint1"><li>Business</li><li>Contract</li></ul>
我正在使用以下 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);
由于某种原因,输出总是会省略 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>
它的问题是它省略了所有结束标签但保留了开始标签。我猜这是因为 XPATH 试图解析内部元素,而不是仅仅将其视为字符串。
如果我尝试使用
选择脚本元素$testDom = $this->xpath->evaluate("//div[@id='businessDetails']/script");
$test = $testDom->item(0)->nodeValue;
echo htmlentities($test);
我的输出将是,您可以看到它缺少所有结束标记。
document.write(rot_decode('<u7>Pbagnpg Qrgnvyf<qy vq="pbagnpgQrgnvyf"><qg>Cu:<qq>(58) 0078 8455'));
【问题讨论】:
标签: php html xpath string tags