PHP:如何用XMLWriter替换现有的XML节点
我正在编辑一个XML文件,需要用数据库中的数据填充它。 DOM可以工作,但无法扩展到几百MB,因此我现在使用XMLReader和XMLWriter来编写非常大的XML文件。 现在,我需要选择一个节点并添加孩子,但我找不到一个方法来完成它,有人可以帮我吗?
我可以通过以下方式找到我需要添加孩子的节点:
if ($xmlReader->nodeType == XMLReader::ELEMENT && $xmlReader->name == 'data')
{
echo 'data was found';
$data = $xmlReader->getAttribute('data');
}
我现在如何将更多的节点/孩子添加到找到的节点? 再次澄清,此代码将读取并找到该节点,以便完成。 所需要的是如何特别修改找到的节点? 有没有一种XMLWriter的方法,我没有找到一种方法,通过阅读类文档后会这样做?
默认扩展节点(在你的问题中缺少)
$node = $xmlReader->expand();
不能用XMLReader进行编辑(通过该名称有意义)。 但是,如果将其导入新的DOMDocument
则可以使该特定的DOMNode
可编辑:
$doc = new DOMDocument();
$node = $doc->importNode($node);
然后,您可以执行DOM提供的任何DOM操作,例如添加文本节点:
$textNode = $doc->createTextNode('New Child TextNode added :)');
$node->appendChild($textNode);
如果您更喜欢SimpleXML进行操作,那么您也可以在将节点导入到DOMDocument
后将其导入到SimpleXML中:
$xml = simplexml_import_dom($node);
上面的例子使用了我的xmlreader-iterator,它为我提供了一些更好的XMLReader
接口:
$reader = new XMLReader();
$reader->open($xmlFile);
$elements = new XMLElementIterator($reader, 'data');
foreach ($elements as $element)
{
$node = $element->expand();
$doc = new DOMDocument();
$node = $doc->importNode($node, true);
$node->appendChild($doc->createTextNode('New Child TextNode added :)'));
echo $doc->saveXML($node), "n";
}
使用以下XML文档:
<xml>
<data/>
<boo>
<blur>
<data/>
<data/>
</blur>
</boo>
<data/>
</xml>
上面的小示例代码产生以下输出:
<data>New Child TextNode added :)</data>
<data>New Child TextNode added :)</data>
<data>New Child TextNode added :)</data>
<data>New Child TextNode added :)</data>
链接地址: http://www.djcxy.com/p/64749.html
上一篇: PHP: How to replace existing XML node with XMLWriter
下一篇: XML: how to execute XPath query not from the root element