Perl Xpath ::如何提取属性所属的所有属性值和元素的名称

时间:2012-02-27 07:22:46

标签: perl xpath extract

我是XPath的新手,想知道如何在XML文档中提取值。

我有一个XML:

<root>
<element1 attrib1 = value1 attrib2 = value2 >
<element2 attrib1 = value1 attrib2 = value2 >
<element3 attrib1 = value1 attrib2 = value2 >
</root>

我想要做的是提取所有attrib = value对以及元素名称。 例如:     element1 attrib1 value1     element2 attrib2 value2     。     。     element3 attrib2 value2

我尝试使用'//@*' XPath查询,该查询返回attrib = value,而不是elt名称。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

要从XML文件中提取值,您需要执行以下操作,

use XML::XPath;

my $i;

#specify the file name

my $xpath = XML::XPath->new(filename => "file.xml");

# Now you can traverse through the nodes and get the atrributes

$i = $xp->find('/root/element1')->get_node(1);

# store the extracted values in an array 

push @attrib1, sprintf($i->getAttribute('attrib1'));

push @attrib2, sprintf($i->getAttribute('attrib2'));

$i = $xp->find('/root/element2')->get_node(1);

push @attrib1, sprintf($i->getAttribute('attrib1'));

push @attrib2, sprintf($i->getAttribute('attrib2'));

<强> END

有关Xpath

的更多详细信息,请参阅此处

http://search.cpan.org/~msergeant/XML-XPath-1.13/XPath.pm

答案 1 :(得分:1)

您可以使用'*/*'查找第二级的所有元素。

my $xp = XML::XPath->new( ioref => \*DATA );

# select the element nodes without having to specify their names
my @element_nodes = $xp->findnodes('*/*'); 

foreach my $element (@element_nodes) {
    # see https://metacpan.org/module/XML::XPath::Node::Element
    print $element->getName;
    foreach my $attribute ($element->getAttributes) {
        # see https://metacpan.org/module/XML::XPath::Node::Attribute
        print ' '.$attribute->getName.' '.$attribute->getData;
    }
    print "\n";
}

__DATA__
<root>
<element1 attrib1="value1" attrib2="value2" />
<element2 attrib1="value1" attrib2="value2" />
<element3 attrib1="value1" attrib2="value2" />
</root>