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