【问题标题】:how to get content of an element with HTML nodes?如何使用 HTML 节点获取元素的内容?
【发布时间】:2015-12-12 14:22:15
【问题描述】:

我需要获取一个元素的内容并将该内容放入另一个元素中。我使用createTextNode 将该内容作为子元素附加到目标元素。

当我将其附加为文本节点时,<> 被转换为 <>。如何在不转换的情况下附加该内容?

例如:

<li id="fn1">
<div>
<a>some text
</a>
</div>
</li>

预期输出:

<p>
<div>
    <a>some text
    </a>
</div>
</p>

但我的输出是这样的,

<p>
&lt;div&gt;
&lt;a&gt;some text&lt;/a&gt;
&lt;/div&gt;
</p>

我的代码

$ch=dom->createElement("p");
$li=$xp->query("//li[contains(@id, 'fn')]");
  foreach($li as $liv) {
    $linodes = $liv->childNodes;
    $pvalue="";
       foreach ($linodes as $lin) {                                
       $pvalue.=$dom->saveXML($lin);}
$ch->appendChild($dom->createTextNode($pvalue)); }

我试过了, $ch-&gt;appendChild($dom-&gt;createTextNode(htmlspecialchars_decode($pvalue))); 但输出相同

【问题讨论】:

  • 您可以使用htmlspecialchars_decode 来输出 HTML 应有的内容。
  • 我试过了,$ch-&gt;appendChild($dom-&gt;createTextNode(htmlspecialchars_decode($pvalue))); ,但输出与附加为 textnode 的输出相同,否则我应该在代码中的哪里使用该函数?

标签: php html dom domdocument


【解决方案1】:

如果你愿意

  • 移动同一文档中的一个节点:通过DOMNode::removeChild 删除该节点,并通过DOMNode::appendChild 将该函数的返回值附加到它的新父节点。
  • 复制该节点到同一文档中的新位置,通过DOMNode::clone 对该节点进行深度克隆并附加它。
  • 将节点转移到另一个文档,通过DOMDOcument::importNode将该节点导入到新文档,然后将其附加到其新父级。

【讨论】:

  • 谢谢!在我的代码中哪里可以使用cloneNode(true)
  • 您的情况属于这三种情况中的哪一种?移动、复制还是转移?
  • 需要将特定元素的节点(内容)复制到目标元素
  • 有效!我试过$pvalue=$liv-&gt;cloneNode(True);$ch-&gt;appendChild($pvalue)。非常感谢
  • 还有一个查询。 cloneNode 包含 parentNode,而不是 parentNode 的内容。该怎么办?
猜你喜欢
  • 2012-10-22
  • 2016-04-13
  • 2019-03-20
  • 2011-05-20
  • 2015-12-07
  • 1970-01-01
  • 2017-08-03
  • 2015-11-06
  • 2013-01-15
相关资源
最近更新 更多