Манипулирование и удаление узлов XML - PullRequest
0 голосов
/ 26 января 2012

У меня есть вывод xml, сгенерированный из cms (drupal)

Мне нужно работать с этим xml, но автоматический вывод генерирует много бесполезных узлов, и мне нужно их стереть.

Это пример, аналогичный исходному XML, который я должен изменить (очень упрощенная версия, конечно)

 <node>
       <title>AAAAAA</title>
       <category>1</category>
       <description>blablabla</description>
 </node>

 <node>
       <title>ZZZZZ</title>
       <category>7</category>
       <description>blablabla</description>
 </node>


 <node>
       <title>XXXXXXXX</title>
       <category>5</category>
       <description>blablabla</description>
 </node>

 <node>
       <title>BBBBBBB</title>
       <category>1</category>
       <description>blablabla</description>
 </node>

 <node>
       <title>CCCCCCCCC</title>
       <category>1</category>
       <description>blablabla</description>
 </node>

 <node>
       <title>YYYYYYYY</title>
       <category>4</category>
       <description>blablabla</description>
 </node>

Предположим, у нас есть проверка категории,я хочу сохранить только узлы с категорией 1.

Все, что мне нужно сделать, - это проанализировать xml, распознающий определенный тег (например), и стереть всю ненужную информацию, чтобы получить что-то подобное этому примеру.

 <node>
       <title>AAAAAA</title>
       <category>1</category>
       <description>blablabla</description>
 </node>

 <node>
       <title>BBBBBBB</title>
       <category>1</category>
       <description>blablabla</description>
 </node>

 <node>
       <title>CCCCCCCCC</title>
       <category>1</category>
       <description>blablabla</description>
 </node>

Идея такова: проверить определенный тег и сохранить всю информацию в узле ... Как я могу сделать что-то подобное?Я полагаю, я должен использовать что-то вроде DOM.Я бы предпочел использовать php, но ява приветствуется.

1 Ответ

1 голос
/ 26 января 2012

Рассмотрим следующий пример:

<code>$xml = simplexml_load_string($xml);
$nodes = $xml->xpath('//node[category[text()!="1"]]');

foreach ($nodes as $node) {
    $dom = dom_import_simplexml($node);
    $dom->parentNode->removeChild($dom);
}

// Now $xml is modified and consists of the nodes with category 1 only
echo '<pre>'; print_r($xml); echo '
';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...