это может звучать довольно прямолинейно, но все же я хочу опубликовать этот вопрос на форуме. У меня есть xml-файл, который нужно добавить с данными после основного элемента и сохранить файл xml, не перезаписывая существующий xml-файл, но чтобы добавить данные к уже существующим данным и обновить xml-файл.
Например, мои данные xml выглядят примерно так:
<maincontent> <headercontent> <product num="2102"> <name>MSG</name> <category>Wellness</category> <available content="YES"></available> </product> <product num="2101"> <name>YSD</name> <category>Music</category> <available content="NO"></available> </product> <product num="2100"> <name>RCS</name> <category>Media</category> <available content="YES"></available> </product> </headercontent> </maincontent>
Я хочу добавить еще один продукт со всей информацией и добавить недавно добавленные данные вверху, чтобы новые добавленные данные появились после содержимого заголовка.
Добавляемые данные:
<product num="2103"> <name>AGB</name> <category>Movies</category> <available content="YES"></available> </product>
Обновленный xml-файл должен выглядеть так, как показано ниже:
<maincontent> <headercontent> <product num="2103"> <name>AGB</name> <category>Movies</category> <available content="YES"></available> </product> <product num="2102"> <name>MSG</name> <category>Wellness</category> <available content="YES"></available> </product> <product num="2101"> <name>YSD</name> <category>Music</category> <available content="NO"></available> </product> <product num="2100"> <name>RCS</name> <category>Media</category> <available content="YES"></available> </product> </headercontent> </maincontent>
Любой полезный совет или часть примера кода будут действительно полезны.
Редактировать:
извините, ребята, я не написал ни одного php-кода, моя вина. Вот код, над которым я работал:
благодаря
<?php $xmldoc = new DomDocument(); $xmldoc->formatOutput = true; $productNum = "2103"; $name = "AGB"; $category = "Movies"; $content = "YES"; if($xml = file_get_contents('main.xml')){ $xmldoc->loadXML($xml); $root = $xmldoc->firstChild; $newElement = $xmldoc->createElement('product'); $root->appendChild($newElement); $numAttribute = $xmldoc->createAttribute("num"); $numAttribute->value = $productNum; $newElement->appendChild($numAttribute); $nameElement = $xmldoc->createElement('name'); $root->appendChild($nameElement); $nameText = $xmldoc->createTextNode($name); $nameElement->appendChild($nameText); $categoryElement = $xmldoc->createElement('category'); $root->appendChild($categoryElement); $categoryText = $xmldoc->createTextNode($category); $categoryElement->appendChild($categoryText); $availableElement = $xmldoc->createElement('available'); $root->appendChild($availableElement); $availableAttribute = $xmldoc->createAttribute("content"); $availableAttribute->value = $content; $availableElement->appendChild($availableAttribute); $xmldoc->save('main.xml'); } ?>
Мой xml-файл обновляется, но данные добавляются в firstchild, и это тоже внизу, вместо этого я хочу добавить данные после и в начале, как показано выше. Вот мой вывод:
<maincontent> <headercontent> <product num="2102"> <name>MSG</name> <category>Wellness</category> <available content="YES"/> </product> <product num="2101"> <name>YSD</name> <category>Music</category> <available content="NO"/> </product> <product num="2100"> <name>RCS</name> <category>Media</category> <available content="YES"/> </product> </headercontent> <product num="2103"/><name>AGB</name><category>Movies</category><available content="YES"/></maincontent>
Любой совет?
Это сработает.
<?php $xmldoc = new DomDocument( '1.0' ); $xmldoc->preserveWhiteSpace = false; $xmldoc->formatOutput = true; $productNum = "2103"; $name = "AGB"; $category = "Movies"; $content = "YES"; if( $xml = file_get_contents( 'main.xml') ) { $xmldoc->loadXML( $xml, LIBXML_NOBLANKS ); // find the headercontent tag $root = $xmldoc->getElementsByTagName('headercontent')->item(0); // create the <product> tag $product = $xmldoc->createElement('product'); $numAttribute = $xmldoc->createAttribute("num"); $numAttribute->value = $productNum; $product->appendChild($numAttribute); // add the product tag before the first element in the <headercontent> tag $root->insertBefore( $product, $root->firstChild ); // create other elements and add it to the <product> tag. $nameElement = $xmldoc->createElement('name'); $product->appendChild($nameElement); $nameText = $xmldoc->createTextNode($name); $nameElement->appendChild($nameText); $categoryElement = $xmldoc->createElement('category'); $product->appendChild($categoryElement); $categoryText = $xmldoc->createTextNode($category); $categoryElement->appendChild($categoryText); $availableElement = $xmldoc->createElement('available'); $product->appendChild($availableElement); $availableAttribute = $xmldoc->createAttribute("content"); $availableAttribute->value = $content; $availableElement->appendChild($availableAttribute); $xmldoc->save('main.xml'); } ?>
Надеюсь это поможет.