У меня есть следующий XML-файл карты сайта, который содержит список URL-адресов для поисковых систем. Я взял этот пример кода из другого ответа 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. Я хочу добавить новый URL к существующему urlset, используя XMLReader
$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();
Я не смог найти правильные примеры того, как обновить XML-файл с помощью XMLreader. Как я могу переписать этот код, чтобы он добавлял новые URL-адреса в тег URL-адреса с помощью XMLreader?
Изменить 1:
У меня есть эта карта сайта XML,
<?xml version="1.0" encoding="UTF-8"?>
<urls>
<url>
<loc>http://www.bbc.com</loc>
</url>
</urls>
Я хочу, чтобы программа добавила один новый URL на URLs тег, как это, например. добавление URL 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? Любые ссылки на другие сайты также приветствуются.
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);
Я жду хорошего ответа, у меня есть некоторые проблемы (XML-файл с более чем 50 000 элементов), и я хотел бы добавить элемент без полной загрузки XML в памяти