从不在同一数组中但始终如下的解析 XML 文件中提取信息

Pulling Information from a Parsed XML File that's NOT in the same array but always the following

提问人:Jusaquikie 提问时间:11/13/2020 最后编辑:Thân LƯƠNG ĐìnhJusaquikie 更新时间:11/14/2020 访问量:58

问:

我希望将下面的值拉到我的脚本中。我的问题是它不在同一个数组中,它总是紧跟在它后面,所以我不知道如何抓住它。我想知道是否有办法查找 NEXT 标签并@value提取值。RO_XV100parameters

我正在解析的内容的片段。

               <momentaryButton name="MomentaryPushButton7"  description="Valve Force Toggle" >
             </momentaryButton>
            <parameters>
                <parameter name="#1" description="Valve Tag" value="RO_XV100"/>
            </parameters>

这是 Perl 的片段。

  foreach my $title ($doc->findnodes('//momentaryButton')) {
    my $sec;
    my @securitylevels= ();
    my $button = $title->findvalue('@description');
    $sec = "G";
    }
    print_latex($i,$button,"Momentary Push Button",$sec,"N\/A","N\/A");
    $i++;
  } 

感谢您的帮助。 我正在使用:

use XML::LibXML;
use XML::Parser; 
xml perl xml 解析

评论

1赞 Håkon Hægland 11/13/2020
你能显示一个完整的(最小的)XML文件吗?还要尝试显示一个完整的最小 Perl 脚本。参见最小可重复示例

答:

2赞 ikegami 11/13/2020 #1

XPath 是 的缩写。 并称为“搜索轴”。您可以通过搜索轴来实现您想要的。//foo/bar/descendant::foo/child::bardescendantchildfollowing-sibling

for my $button_node ($doc->findnodes('//momentaryButton')) {
   my $button_text = $button_node->getAttribute('description');
 
   my $param_val = $doc->findvalue(
      'following-sibling::parameters/parameter[1]/@value', $button_node);
 
   print_latex($i, $button_text, "Momentary Push Button", $sec, "N/A", "N/A");
   ++$i;
}

如果希望按名称而不是按位置查找参数,则可以改用以下 XPath:

following-sibling::parameters/parameter[@name="#1"]/@value

评论

0赞 Jusaquikie 11/14/2020
谢谢池上!我能够让它与你的答案一起工作。非常感谢
1赞 ikegami 11/14/2020
没关系。这通常是通过检查答案旁边的标记来传达的。