我认为这是一个非常简单的问题,但是尽管进行了很多搜索,但我还是无法解决。
我正在尝试解析以下XML以打印类似于TAG = VALUE的内容,以便可以将其写入CSV文件。问题在于每个样本的标签并不总是相同的。我似乎无法弄清楚如何获得实际的标签名称。任何帮助表示赞赏!!!
XML文件-
<Statistics>
<Stats>
<Sample>
<Name>System1</Name>
<Type>IBM</Type>
<Memory>2GB</Memory>
<StartTime>2012-04-26T14:30:01Z</StartTime>
<EndTime>2012-04-26T14:45:01Z</EndTime>
</Sample>
<Sample>
<Name>System2</Name>
<Type>Intel</Type>
<Disks>2</Disks>
<StartTime>2012-04-26T15:30:01Z</StartTime>
<EndTime>2012-04-26T15:45:01Z</EndTime>
<Video>1</Video>
</Sample>
</Stats>
</Statistics>
脚本 -
#!/usr/bin/perl
use XML::LibXML;
$filename = "data.xml";
my $parser = XML::LibXML->new();
my $xmldoc = $parser->parse_file($filename);
for my $sample ($xmldoc->findnodes('/Statistics/Stats/Sample')) {
print $sample->nodeName(), ": ", $sample->textContent(), "\n";
}
最佳答案
您拥有获取标签名称的正确方法,只需要一个额外的循环来遍历每个<sample>
中的标签:
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my $filename = "data.xml";
my $parser = XML::LibXML->new();
my $xmldoc = $parser->parse_file($filename);
for my $sample ($xmldoc->findnodes('/Statistics/Stats/Sample')) {
for my $property ($sample->findnodes('./*')) {
print $property->nodeName(), ": ", $property->textContent(), "\n";
}
print "\n";
}
编辑:我现在已经创建了一个名为Perl XML::LibXML by Example的教程站点,它可以准确回答此类问题。
关于xml - Perl脚本使用XML::LibXML解析XML;,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10404152/