提问人:Perl_Newbie 提问时间:4/29/2022 最后编辑:collapsarPerl_Newbie 更新时间:4/29/2022 访问量:70
如何使用 perl 访问以特定字符结尾的 xml 元素
How to access an element of an xml which ends with specific characters using perl
问:
我的 xml 文件具有如下节点,但是第二个子节点的名称并不总是相同的。但它总是以相同的扩展名结尾,在本例中为 text。如何访问这些节点。请帮忙。我在 perl 中使用了 XML::LibXML。
<Root>
<ele1>"text"</ele1>
<name attr="xxxxx">
<value>10</value>
<xxtext>90</xxtext>
</name>
<name attr="yyyy">
<value>30</value>
<yytext>100</yytext>
</name>
</Root>
代码:
my $parser = XML::LibXML->load_xml(location=>$xml);
foreach my $sec ($parser->findnodes('/Root/name)) {
my $value=$sec->findnodes('./value'); print $value,"\n";
my $ias=$sec->findnodes('./*text'); -------------? This is where I am facing problem.
}
它可以找到标签值,但在这种情况下,我无法访问标签以 ias 结尾的元素。我想知道是否有办法访问这些类型的标签。请帮忙。
答:
3赞
collapsar
4/29/2022
#1
如果目标元素在其同级元素中的位置是已知的,则可以通过 xpath 函数或:last()
position()
my $ias=$sec->findnodes('./*[last()]');
或
my $ias=$sec->findnodes('./*[position() = 2]');
另类
您还可以对目标节点的元素名称(部分)进行寻址,该元素名称通过以下函数提供:name()
my $ias=$sec->findnodes('*[ends-with(name(), "text")]');
但是,该函数需要 XPath 2 支持。ends-with()
注意
有各种站点可以测试 XPath 表达式,例如。这里。尝试时,在代码中的 XPath 表达式中替换 for。//name
.
评论