使用XML :: LibXML解析XML的Perl脚本;

前端之家收集整理的这篇文章主要介绍了使用XML :: LibXML解析XML的Perl脚本;前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我认为这是一个非常简单的问题,但尽管进行了大量搜索,但我无法弄明白.

我正在尝试解析以下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相关文章