我认为这是一个非常简单的问题,但尽管进行了大量搜索,但我无法弄明白.
我正在尝试解析以下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的教程网站,它完全回答了这类问题.