如何使用PHP XML reader&amp ;;更新此xml文件作家?

时间:2014-11-01 18:06:03

标签: php xmlreader xmlwriter

我有以下站点地图XML,其中包含要为搜索引擎提交的网址列表。我从另一个SO答案中获取了这个示例代码。

// Init XMLWriter
$writer = new XMLWriter();
$writer->openURI(APPLICATION_PATH . '/sitemap.xml');

// document head
$writer->startDocument('1.0', 'UTF-8');
$writer->setIndent(4);
$writer->startElement('urlset');
$writer->writeAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9');

// Write something
// this will write: <url><loc>some url here;  SO not allowed me</loc></url>
$writer->startElement('url');
$writer->writeElement('loc', 'some url here; SO not allowed me');
$writer->endElement();

// end urlset
$writer->endElement();
// end document
$writer->endDocument();

此代码使用XML编写器创建新的站点地图。我想使用XMLReader

将新url附加到现有urlset
$reader = new XMLReader();
if (!$reader->open('sitemap.xml')){
    die("Failed to open 'sitemap.xml'");
}
while($reader->read()){
    if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'urlset') {
        $writer->startDocument('1.0', 'UTF-8');
        $writer->startElement('url');
        $writer->writeElement('loc', 'http://www.test.com');
        $writer->endElement();
        break;
    }
}
$reader->close();

我找不到关于如何使用XMLreader更新xml文件的正确示例。如何重写此代码,以便使用XMLreader将新URL附加到url set标记?

修改1:

我有这个xml站点地图,

<?xml version="1.0" encoding="UTF-8"?>
<urls>
    <url>
     <loc>http://www.bbc.com</loc>
    </url>
</urls>

我希望程序在 urls 标记中添加一个新网址,例如。添加网址 google.com

<?xml version="1.0" encoding="UTF-8"?>
<urls>
    <url>
     <loc>http://www.bbc.com</loc>
    </url>
    <url>
     <loc>http://www.google.com</loc>
    </url>
</urls>

我如何才能获得此功能,或者是否有其他帮助程序,如 DOMDocument simplexml 在PHP中执行此操作?任何对其他网站的引用也是受欢迎的。

2 个答案:

答案 0 :(得分:1)

XMLWriter不适合这种方法。您应该使用不同的库,例如simplexml。

有了它,它非常简单。虽然我不知道你的文档结构是什么样子,但让我们来看看它:

//load the file for our manipulating
$xml = simplexml_load_file($file);

//grab the parent element that we want to append to
$urls = $xml->urls;

//add a new child called Url
$newUrl = $urls->addChild('url');

//add a new child called loc to the new child Url we just created, add a link to yahoo
$newUrl->addChild('loc', 'http://www.yahoo.com');

//write the output
$xml->asXML($xml);

Here's an eval.in example

答案 1 :(得分:1)

我等待一个好的回复,我有一些问题(xml文件有超过50.000个元素),我想在内存中添加无负载完整xml的元素