如何使用 perl 访问以特定字符结尾的 xml 元素

How to access an element of an xml which ends with specific characters using perl

提问人:Perl_Newbie 提问时间:4/29/2022 最后编辑:collapsarPerl_Newbie 更新时间:4/29/2022 访问量:70

问:

我的 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 结尾的元素。我想知道是否有办法访问这些类型的标签。请帮忙。

xml perl xml 解析

评论

1赞 TLP 4/29/2022
您是否尝试过使用XML解析器?或任何其他Perl代码?您应该向我们展示之前的尝试。
0赞 Perl_Newbie 4/29/2022
好的,我已经相应地编辑了这个问题。
1赞 TLP 4/29/2022
另外,永远不要说“它不起作用”,说它如何不起作用。否则人们不得不猜测。例如,我现在猜测它什么都不打印。您是否从文件中获取其他数据?
0赞 Perl_Newbie 4/29/2022
给我一分钟,我不能分享xml,但我会尝试描述我做了什么。现在我已经更新了,希望这有助于解决问题。谢谢。
1赞 Perl_Newbie 4/29/2022
@TLP感谢您在整个过程中的指导,这些提示也很有帮助。

答:

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.