Я немного потренировался с PHP и у меня есть несколько вопросов о том, как добавлять новые узлы в XML для каждого элемента с переменной в качестве атрибута с использованием PHP, я объясню это подробно.
Сначала язагрузить XML-файл, структура которого похожа на следующую:
<?xml version="1.0" encoding="utf-8"?>
<products>
<item>
<reference>00001</reference>
<other_string>PRODUCT 1</other_string>
<brand>BRAND 1</brand>
<promo>YES</promo>
</item>
<item>
<reference>00002</reference>
<other_string>PRODUCT 2</other_string>
<brand>BRAND 2</brand>
<promo>YES</promo>
</item>
<item>
<reference>00003</reference>
<other_string>PRODUCT 3</other_string>
<brand>BRAND 3</brand>
<promo>NO</promo>
</item>
<item>
<reference>00004</reference>
<other_string>PRODUCT 4</other_string>
<brand>BRAND 4</brand>
<promo>NO</promo>
</item>
<item>
<reference>00005</reference>
<other_string>PRODUCT 5</other_string>
<brand>BRAND 5</brand>
<promo>YES</promo>
</item>
</products>
И, как вы можете видеть, в XML есть узел с именем <promo></promo>
с двумя возможными переменными «YES» и «NO», поэтомуна основании этого мне нужно создать новый узел, содержащий «1», если присутствует «YES», или «0», если «NO» будет выглядеть примерно так:
<?xml version="1.0" encoding="utf-8"?>
<products>
<item>
<reference>00001</reference>
<other_string>PRODUCT 1</other_string>
<brand>BRAND 1</brand>
<promo>YES</promo>
<newnode>1</newnode>
</item>
<item>
<reference>00002</reference>
<other_string>PRODUCT 2</other_string>
<brand>BRAND 2</brand>
<promo>YES</promo>
<newnode>1</newnode>
</item>
<item>
<reference>00003</reference>
<other_string>PRODUCT 3</other_string>
<brand>BRAND 3</brand>
<promo>NO</promo>
<newnode>0</newnode>
</item>
<item>
<reference>00004</reference>
<other_string>PRODUCT 4</other_string>
<brand>BRAND 4</brand>
<promo>NO</promo>
<newnode>0</newnode>
</item>
<item>
<reference>00005</reference>
<other_string>PRODUCT 5</other_string>
<brand>BRAND 5</brand>
<promo>YES</promo>
<newnode>1</newnode>
</item>
</products>
Я играл с этим кодомно он не работает рекурсивно и кажется, что не определяет значения с помощью xPath:
<?php
$sXML = simplexml_load_file('file.xml', null, LIBXML_NOBLANKS);
$promoyes = $sXML->xpath("//item[promo='YES']");
foreach ( $promoyes as $value ) {
$value = $sXML->item->addChild('newnode', '1');
}
unset($value);
$promono = $sXML->xpath("//item[promo='NO']");
foreach ( $promono as $value ) {
$value = $sXML->item->addChild('newnode', '0');
}
unset($value);
$domDocument = dom_import_simplexml($sXML)->ownerDocument;
$domDocument->formatOutput = true;
echo $domDocument->save('new.xml');
?>
Любая помощь будет признательна.