gpt4 book ai didi

xml - 如何在片段创建中使用全局命名空间定义?

转载 作者:数据小太阳 更新时间:2023-10-29 02:29:56 25 4
gpt4 key购买 nike

根元素有命名空间声明,如 xmlns:xlink="http://www.w3.org/1999/xlink" ...因此,任何附加的节点(例如 appendChild )都将接受命名空间。我可以附加 <graphic xlink:href=".."/>因为总的来说它是有效的......但是要附加一个片段我需要先用 createDocumentFragment() 创建片段.

例子:

    $tmp = $dom->createDocumentFragment();
$ok = $tmp->appendXML('<graphic xlink:href="file123.ext"/>');

运行时,产生错误,
DOMDocumentFragment::appendXML(): namespace error :
Namespace prefix xlink for href on inline-graphic is not defined

如何对 DOMDocumentFragment::appendXML() 说“使用 DomDocument 命名空间”方法?


注释和上下文

( transfered as an answer ,不要污染这里)

最佳答案

看起来它正在按照预期的方式工作。查看bug report #44773 . chregu@php.net 说这不是错误并且可以正常工作。尽管我同意错误报告和其他评论,但由于该片段是由 DOMDocument 构成的,并且它定义了 namespace ,因此它实际上应该知道它们是什么并且应该可以毫无问题地工作。

将 namespace 与元素一起传递。它不会出现在输出的 XML 中,但会被片段读取,以便它可以创建属性而不会出现任何错误。

$dom = new DOMDocument('1.0', 'utf-8');
$root = $dom->createElement('MyRoot');
$root->setAttributeNS('http://www.w3.org/2000/xmlns/','xmlns:xlink','http://www.w3.org/1999/xlink');
$dom->appendChild($root);

$tmp = $dom->createDocumentFragment();
$ok = $tmp->appendXML('<graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="file123.ext"/>');
$dom->documentElement->appendChild($tmp);
die($dom->saveXML());

输出

<?xml version="1.0" encoding="utf-8"?>
<MyRoot xmlns:xlink="http://www.w3.org/1999/xlink"><graphic xlink:href="file123.ext"/></MyRoot>

关于xml - 如何在片段创建中使用全局命名空间定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26593430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com