因为我需要删除特定元素element1 and element 2
,如果它与空内容相同。
例如:
<severaltags>
...
<element1><element2/></element1>
...
<severaltags>
此处element 1
为空且element 2
因此我需要删除特别是那两个元素element1
和element2
。
任何人都可以帮助你解决这个问题:
我已经搜索并尝试了以下代码,但没有成功。
use strict;
use warnings;
use XML::LibXML;
my $xml = XML::LibXML->new->parse_fh(*DATA);
for ( $xml->findnodes("//*") )
{
$_->parentNode->removeChild($_)
unless $_->textContent() =~ /\S/
or $_->hasAttributes();
}
print $xml->serialize(1);
答案 0 :(得分:3)
首先删除所有空的element2,然后删除空的element1,因为现在应该包含最初包含element2的那些。
您可以直接在XPath中指定空白:
use strict;
use warnings;
use XML::LibXML;
my $xml = 'XML::LibXML'->load_xml(location => '1.xml');
for my $element_name (qw( element2 element1 )) {
for my $element ($xml->findnodes("//$element_name"
. '[not(text() | * | @*)]')
) {
$element->parentNode->removeChild($element);
}
}
print $xml->serialize(1);