我想问一下,如何轻松地将新节点附加到php中找到的节点的末尾。 可以说我有这样的xml:
<Root>
<child id=1>
<text>smth</text>
</child>
</Root>
我想找到id为1的子元素,然后将另一个节点作为last添加。 我试图找到答案,但要么回答如何找到答案,要么如何写入答案,遗憾的是我无法将其整合在一起。
如果有人可以帮助我,我会很高兴。
答案 0 :(得分:1)
您可以使用xpath
查找相关节点(基于id
),然后使用addChild
将新的子节点添加到您刚找到的节点:< / p>
$str =<<< END
<Root>
<child id="1">
<text>smth</text>
</child>
</Root>
END;
$result = simplexml_load_string($str);
$child = $result->xpath("*[@id='1']")[0];
$child->addChild('text', 'node value');
// The part from here is only to make the output pretty-xml
// instead you can just use $result->saveXML()
$dom = new DOMDocument("1.0");
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($result->saveXML());
var_dump($dom->saveXML());
输出将是:
string(115) "<?xml version="1.0"?>
<Root>
<child id="1">
<text>smth</text>
<text>node value</text>
</child>
</Root>
"
答案 1 :(得分:0)
在DOM中,您使用Xpath查找节点DOMDocument::create*()
以创建节点和方法(如DOMNode::appendChild()
)以将它们放入文档中。
$xml =<<< END
<Root>
<child id="1">
<text>smth</text>
</child>
</Root>
END;
$document = new DOMDocument("1.0");
$document->preserveWhiteSpace = false;
$document->formatOutput = true;
$document->loadXml($xml);
$xpath = new DOMXpath($document);
foreach ($xpath->evaluate('//*[@id="1"][1]') as $parentNode) {
$parentNode
->appendChild($document->createElement('text'))
->appendChild($document->createTextNode('node value'));
}
echo $document->saveXML();
输出:
<?xml version="1.0"?>
<Root>
<child id="1">
<text>smth</text>
<text>node value</text>
</child>
</Root>
对于大型XML文件,您可以使用XMLReader / XMLWriter,但不能修改文档。您必须逐步阅读原始内容并编写修改后的副本。