DOMDocument获取每个匹配元素的nodeValue

时间:2013-07-23 22:45:33

标签: php dom domdocument domxpath

我已经习惯了一段时间,但似乎无法做到这一点。

当脚本元素的数量可变时,如何获取所有脚本元素的内容。我的示例标记看起来像这样:

<div></div>
<iframe><iframe>
<script>xxxx</script>
<script>xxxx</script>
<script>xxxx</script>

到目前为止我的工作只有在我保持脚本数量保持静态时才能正确地迭代数组,但我完全被DOMXPath documentation抛出,如何做到这一点。这就是我到目前为止所做的:

$dom = new DOMDocument();
$dom->preserveWhiteSpace = true;
@$dom->loadHtml($form_content);
$xpath = new DOMXPath($dom);
$items = $xpath->query('//script');
foreach ($items as $item) {
     $scriptContents = $item->previousSibling->previousSibling->nodeValue . "\r\    n\r\n";
     $scriptContents .= $item->previousSibling->nodeValue . "\r\n\r\n";
     $scriptContents .= $item->nodeValue . "\r\n\r\n";
}
echo $scriptContents;

我应该怎么做?我已经搜索了一段时间了,但似乎可以应用一个有效的解决方案。提前致谢 - b

1 个答案:

答案 0 :(得分:0)

您似乎在每次迭代时覆盖$scriptContents,这可能不是您想要的。脚本当前运行的方式,您的输出将限制为最后一个脚本标记的前两个兄弟(无论它们实际上是否是脚本标记)以及最后一个脚本标记。

如果您严格尝试输出脚本标记,则可以执行以下操作:

$xpath = new DOMXPath($dom);
$items = $xpath->query('//script');
foreach ($items as $item) {
     echo $item->nodeValue . "\r\n\r\n";
}