我正在尝试通过将字符串加载为xml节点来将子节点添加到XML节点,但由于某种原因它返回一个空值...
// Load xml
$path = 'path/to/file.xml';
$xml = simplexml_load_file($path);
// Select node
$fields = $xml->sections->fields;
// Create new child node
$nodestring = '<option>
<label>A label</label>
<value>A value</value>
</option>';
// Add field
$fields->addChild('child_one', simplexml_load_string($nodestring));
出于某种原因,添加了child_one但没有内容,尽管它确实放入了换行符。
虽然当我在simplexml_load_string($ nodestring)上执行var_export时,我得到:
SimpleXMLElement::__set_state(array(
'label' => 'A label',
'value' => 'A value',
))
所以我不确定我做错了什么......
示例xml-file:
<config>
<sections>
<fields>
text
</fields>
</sections>
</config>
尝试添加子节点后,Sampe $ xml -file:
<config>
<sections>
<fields>
text
<child_one>
</child_one></fields>
</sections>
</config>
答案 0 :(得分:1)
SimpleXML无法操纵节点。您可以从值创建新节点,但无法创建节点,然后将此节点复制到另一个文档。
以下是该问题的三种解决方案:
答案 1 :(得分:0)
我使用的代码:
// Load document
$orgdoc = new DOMDocument;
$orgdoc->loadXML("<root><element><child>text in child</child></element></root>");
// Load string
$nodestring = '<option>
<label>A label</label>
<value>A value</value>
</option>';
$string = new DOMDocument;
$string->loadXML($nodestring);
// Select the element to copy
$node = $string->getElementsByTagName("option")->item(0);
// Copy XML data to other document
$node = $orgdoc->importNode($node, true);
$orgdoc->documentElement->appendChild($node);