我是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名称。
有什么想法吗?
谢谢!
答案 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
的更多详细信息,请参阅此处答案 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>