我的Xml看起来像这样: 如何为cb =" 1"过滤此xml? ? 我只知道xpath& DataSet是过滤此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>
最有效的方法是什么(按cb = 1过滤):
<root>
<node id="2">
<node id="22" cb="1"></node>
</node>
</root>
关于, Evgeniy Vinnikov
答案 0 :(得分:0)
您还没有标记某种语言,因此我将提供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>