【问题标题】:Perl XML get element node using XML::LibXMLPerl XML 使用 XML::LibXML 获取元素节点
【发布时间】:2020-08-05 11:36:06
【问题描述】:

我想替换我的 XML 文件的元素节点,但我什至没有成功获取节点。我下面的代码适用于其他子节点,但不适用于 id 节点。

这是我的 XML 文件:

<header>
    <idset id="100">                            
        <a>item_a</a>
        <b>item_b</b>
    </idset>
</header>

这是我的代码:

#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use XML::LibXML;

my $file = 'test.xml';
my $parser = XML::LibXML->new();
my $doc = $parser->load_xml(location => $file);

my($object11) = $doc->findnodes('/header/idset');
say 'a: ',$object11->findvalue('./a');
say 'b: ',$object11->findvalue('./b');
say 'id: ',$object11->findvalue('./id');

当前结果:

a: item_a
b: item_b
id:

预期结果:

a: item_a
b: item_b
id: 100

【问题讨论】:

    标签: xml perl xml-libxml


    【解决方案1】:

    id 是一个属性,而不是一个元素。您需要在 xpath 表达式中使用不同的选择器样式。

    say 'id: ',$object11->findvalue('./@id');
    

    在 xpath 中,属性以@foo 为目标。请参阅 https://www.w3.org/TR/1999/REC-xpath-19991116/#path-abbrev 以获取此和其他 xpath 语法的简短摘要。

    【讨论】:

    • 属性和元素的语法不同的原因是一个元素可以有一个属性和一个同名的元素。
    猜你喜欢
    • 2014-07-06
    • 1970-01-01
    • 2022-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2013-03-31
    相关资源
    最近更新 更多