【问题标题】:php replace link valuephp替换链接值
【发布时间】:2012-02-14 19:29:51
【问题描述】:
$links = $li->getElementsByTagName('a');

foreach ($links as $link)
{
$link_text = $link->nodeValue;
$image = $dom->createElement('img');
$image->setAttribute('src', 'some target');
$image->setAttribute('alt', $link_text);

$link->nodeValue($image); // doesnt work
}

如何将链接的节点值替换为新的?(使用 domdocument)

li里面其实有一个链接,但是没有foreach我不知道怎么弄。

【问题讨论】:

  • nodeValue 实际上没有为元素定义。不知道 PHP 是如何处理这个问题的。

标签: php dom domdocument nodevalue


【解决方案1】:

你可以试试这个($doc 是你的 DOMDocument)。

// saveHTML returns the node as a string of HTML.
$link->nodeValue = $doc->saveHTML($image);

或者,更恰当地说,您可以将图像添加为子节点:

// name should be self-documenting.
$link->appendChild($image);

另外,如果你只有一个,你可以简单地使用item 方法并避免使用foreach:

$link = $li->getElementsByTagName('a')->item(0);

【讨论】:

  • 可捕获的致命错误:DOMElement 类的对象无法转换为字符串
  • for saveHtml- 警告:DOMDocument::saveHTML() 需要 0 个参数,给定 1 个
  • 这绝对是一个奇怪的案例,它直接违背了经验和docs,如果可能的话,我会看看你是否有某种奇怪的配置问题。您也可以尝试 saveXML。在这种情况下,它应该提供相同的输出。
  • 无论如何,正确的方法是使用 appendChild。
  • saveXML - 致命错误:在非对象上调用成员函数 saveXML()
【解决方案2】:

你试过赋值运算符=吗?

$link->nodeValue = $link_text;

【讨论】:

  • 可捕获的致命错误:DOMElement 类的对象无法转换为字符串
【解决方案3】:

http://us2.php.net/manual/en/class.domnode.php#domnode.props.nodevalue

nodeValue 是一个字符串。它不能被称为方法。你可以直接设置这个字符串的值,因为它是一个公共成员。

$link->nodeValue = $link_text;

上面链接的文档应该可以回答您的任何问题。

【讨论】:

  • 可捕获的致命错误:DOMElement 类的对象无法转换为字符串
  • 我只是指出它是一个属性,而不是一个方法。该文档应该能够阐明如何操作库以使其正常工作。此外,出现此错误是因为您显然试图将对象 ($image) 分配给该属性。它只接受一个字符串。您可能想要插入一个元素,而不是更改 nodeValue。
  • 我要插入替换nodeValue,有文字,应该换成图片。查了文档,没找到
  • 你试过 $link->appendChild( $image ) 吗?这是将节点附加到 li 的正确方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多