У меня есть следующий XML-файл Sitemap, который содержит список 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();
в$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();
-$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();
-$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 sitemap,
<?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 не подходит для этой методологии. Вы должны использовать другую библиотеку, например, симплекс.
При этом это очень просто. Хотя я не знаю, как выглядит ваша структура документа, давайте возьмем на нее удар:
//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);
Вот пример eval.in
Я жду хорошего ответа, у меня есть некоторая проблема (файл xml с более чем 50 000 элементов), и я хотел бы добавить элемент без загрузки полного xml в память