什么而不是createTextNode不避免XML段落

时间:2016-12-22 14:49:15

标签: php xml

我有一个获取外部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?因为到现在为止我已经得到了这样的代码:

&lt;o id="1" url="link.html" price="899.00" avail="1" weight="0" stock="0" set="0" basket="0"&gt;&#13;

2 个答案:

答案 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元素。