【问题标题】:PHP XPATH of HTML document omitting all tags. I want to keep them省略所有标签的 HTML 文档的 PHP XPATH。我想保留它们
【发布时间】: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


    【解决方案1】:

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

    它很好地维护了内部 html 格式。

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

    【讨论】:

      【解决方案2】:

      是的,你是对的,DOM 会解析子元素(因为它们是元素并且不是字符串),从子元素获取数据的正确方法是遍历所有子元素。不过,实施起来并不复杂。
      您可能还想尝试不同的 XPath 表达式,而不是

      //ul[@id='adPoint1']
      

      试试

      //ul[@id='adPoint1']/li
      

      它将选择具有实际字符串值的元素。
      如果也给出预期的结果(对于 ul 和脚本),也许你会得到更多的答案。

      【讨论】:

      • phunehehe,是的,您是正确的,但我正在寻找一种可以在元素中维护标签的解决方案。我真的想得到一个包含整个 javascript 代码的字符串。
      【解决方案3】:

      将节点作为可选参数传入 saveHTML() 调用所有者文档对象。

      string DOMDocument::saveHTML ([ DOMNode $node = NULL ] )
      

      看...

      http://php.net/manual/en/domdocument.savehtml.php

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-09
        • 2010-11-24
        • 1970-01-01
        • 2019-09-23
        • 1970-01-01
        相关资源
        最近更新 更多