【发布时间】:2014-01-30 15:44:33
【问题描述】:
我有一个非常非常大的 XML 文件(数百万条记录)。由于速度和内存限制,我计划使用XMLReader/XMLWriter。
我需要读取文件,获取一条记录,更改其属性,最后再次保存 XML。
为了进行测试,我创建了一个 XML 文件并使用这些行将一些记录写入其中:
$doc = new XMLWriter();
$doc->openURI($xmlFile);
$doc->startDocument('1.0','UTF-8');
$doc->setIndent(4);
$doc->startElement('DBOS');
for($r=0;$r<10; $r++){
$doc->startElement('ITEMS');
for($i=0;$i<5; $i++){
$doc->startElement('ITEM');
$doc->writeAttribute('id', $r.'-'.$i);
$doc->endElement();
}
$doc->endElement();
}
$doc->endElement();
$doc->endDocument();
$doc->flush();
我用这个又读了一遍:
$reader = new XMLReader();
if (!$reader->open($xmlFile)){
die("Failed to open 'data.xml'");
}
while($reader->read()){
if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'ITEMS') {
$node = $reader->expand();
$items = $node->childNodes;
foreach ($items as $ik => $itm ){
print $itm->textContent.'<br/>';
// how to change the ID Attribute of a Node (DomNode) and save changes to the original XML File
}
break;
}
}
$reader->close();
我的问题:如何更改DomNode 的id 属性并再次使用XMLWriter 将更改保存到原始XML 文件?
【问题讨论】:
标签: php xml xmlreader xmlwriter data-manipulation