XML节点操作和擦除


XML node manipulation and erase

我有一个从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。

考虑以下示例:

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