0
我正在尝试使用createAttribute
将新名称空间分配给现有文档中间的元素。 (信不信由你,但这种做法是很有道理的我的数据集。)如何为一个元素分配一个新的名称空间?
$doc = new DOMDocument();
$doc->loadXML('<doc xmlns="urn:x-one"><element><child1ofmany/></element></doc>');
$xmlns = $doc->createAttribute('xmlns');
$xmlns->value = 'urn:x-two';
$doc->getElementsByTagName('doc')->item(0)->getElementsByTagName('element').appendChild($xmlns);
echo $doc->saveXML();
/*
<?xml version="1.0" encoding="UTF-8"?>
<doc xmlns="urn:x-one">
<element xmlns="urn:x-two">
<child1ofmany/>
</element>
</doc>
*/
然而,这只能肤浅。在文档上使用XSLTProcessor
或XPath将显示element
仍属于urn:x-one
命名空间。
我发现的唯一工作是将字符串化$doc
并再次读取字符串为XML。就像这样:
$doc->loadXML($doc->saveXML());
当然必须有一个更好的方式来实现这一目标?
PS:element
有吨孩子因此重建它和它的孩子(谁应该继承element
的新的命名空间,靠了靠)将是一个缓慢而痛苦的过程也。
XML来自外部来源。他们只是缺少一个外部源不关心的命名空间变化,但我实际上必须处理。 – Aeyoun