XML节点操作和擦除

时间:2012-01-26 11:51:51

标签: php xml dom

我有一个从cms(drupal)自行生成的xml输出

我需要处理这个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,但也欢迎使用java。

1 个答案:

答案 0 :(得分:1)

考虑以下示例:

$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 '</pre>';