我有一个获取外部xml文件的php代码,在最后一段之前添加了一些内容并将其另存为新文件。
<?php
$xmldoc = new DOMDocument();
$xmldoc->load('xml.xml');
$root = $xmldoc->firstChild;
$newElement = $xmldoc->createTextNode('<o id="1" url="link.html" price="899.00" avail="1" weight="0" stock="0" set="0" basket="0"></o>');
$root->appendChild($newElement);
$newText = $xmldoc->createTextNode($newAct);
$newElement->appendChild($newText);
$xmldoc->save('sample.xml');
?>
但是,我不想丢失像#34;这样的XML标志。 &LT;&GT; &#34 ;.我应该使用什么而不是createTextNode?因为到现在为止我已经得到了这样的代码:
<o id="1" url="link.html" price="899.00" avail="1" weight="0" stock="0" set="0" basket="0">
答案 0 :(得分:1)
DOMDocument :: createTextNode()完全相同,它创建了一个包含文本的节点。它不会丢失特殊字符 - 它们将被编码为序列化的实体。
以下是其他方法,如DOMDocument :: createElement()用于创建元素节点,DOMElement :: setAttribute()用于设置元素节点上的属性。
如果您有一个XML片段作为字符串文字,这里是一个可以使用它的节点类型。 DOMDocumentFragment。
$document = new DOMDocument();
$root = $document->appendChild($document->createElement('foo'));
$fragment = $document->createDocumentFragment();
$fragment->appendXml('<p>some text</p>');
$root->appendChild($fragment);
echo $document->saveXml();
文档片段是一种虚拟节点,是一个节点列表,其中一个节点作为容器,因此可以将它们传递给DOM方法。使用DOMDocumentFragment:appendXml()时要小心,否则你可能会打开HTML / XML注入。
答案 1 :(得分:0)
您正在搜索createElement。
<?php
$newElement = $xmldoc->createTextNode('o');
$newElement->setAttribute("url", "link.html");
然后,您可以添加与您的示例匹配的属性。
见setAttribute。 createTextNode仅创建文本节点,不创建XML。 createElement,创建一个XML元素。