什么是最有效的xml过滤方式

  • 本文关键字:xml 过滤 方式 有效 xml
  • 更新时间 :
  • 英文 :


我有Xml看起来像这样:我如何过滤这个xml为cb="1"?我只知道xpath &数据集是过滤xml的方法:

<root>
  <node id="1">
       <node cb="0"></node>
       <node cb="0"></node>
  </node>
  <node id="2">
       <node id="21" cb="0"></node>
       <node id="22" cb="1"></node>
  </node>
</root>

什么是最有效的方法使它像(filter by cb=1):

<root>
   <node id="2">
        <node id="22" cb="1"></node>
   </node>
 </root>

与问候,7 Vinnikov

您还没有标记语言,所以我将提供perl作为解决方案。

use strict;
use warnings;
use XML::Twig;
sub process_node {
    my ( $twig, $node ) = @_;
    if ( $node->has_children ) {
        my $match = $node->get_xpath( './node[@cb="1"]', 0 );
        if ( not defined $match ) {
            $node->delete;
        }
    }
    else {
        if (   not defined $node->att('cb')
            or not $node->att('cb') eq "1" )
        {
            $node->delete;
        }
    }
}
my $twig = XML::Twig->new(
    pretty_print  => 'indented',
    twig_handlers => { 'node' => &process_node, },
)->parse( *DATA );
$twig->print;
__DATA__
<root>
  <node id="1">
       <node cb="0"></node>
       <node cb="0"></node>
  </node>
  <node id="2">
       <node id="21" cb="0"></node>
       <node id="22" cb="1"></node>
  </node>
</root>

这将产生:

<root>
  <node id="2">
    <node cb="1" id="22"></node>
  </node>
</root>

最新更新