Php DOMDocument获取每个匹配元素的nodeValue

Php DOMDocument获取每个匹配元素的nodeValue,php,dom,domdocument,domxpath,Php,Dom,Domdocument,Domxpath,我已经在这方面做了一段时间了,但似乎做不好 当脚本元素的数量可变时,如何获取所有脚本元素的内容。我的示例标记如下所示: <div></div> <iframe><iframe> <script>xxxx</script> <script>xxxx</script> <script>xxxx</script> 我该怎么做?我已经搜索了一段时间,但似乎可以应用一个有效的解决方案。

我已经在这方面做了一段时间了,但似乎做不好

当脚本元素的数量可变时,如何获取所有脚本元素的内容。我的示例标记如下所示:

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

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

每次迭代都会覆盖
$scriptContents
,这可能不是您想要的。按照脚本当前的操作方式,您的输出将限于最后一个脚本标记的前两个同级(无论它们是否实际上是脚本标记本身)以及最后一个脚本标记

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

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

我不理解这个问题。如果您有3个
script
标记,您的foreach将循环3次,如果您有10个
script
标记,它将迭代10次。你看到的与此不同的行为是什么?你能显示会导致这不正确的HTML吗?现在,我还不太清楚在每次迭代中覆盖变量时,您试图用
$scriptContents
做什么。也许这解释了你期望发生的事情和实际发生的事情之间的差异。对我来说,这看起来只会回显最后一个脚本标记的最后三个同级节点。检查和引用使用的库,它非常简单,可以让你从
字符串
加载
HTML
。@MikeBrant-新的一天,我看到了,基本错误,我忽略了,因为我认为我做了一些错误的DOMXPath。正如您指出的问题所在,我需要先声明它,然后再声明
$scriptContents.=$item->previousSibling->nodeValue将按预期获取所有脚本节点的内容。如果你想写下来作为回答,我会接受的。
$xpath = new DOMXPath($dom);
$items = $xpath->query('//script');
foreach ($items as $item) {
     echo $item->nodeValue . "\r\n\r\n";
}