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

标签 xml perl libxml2

我认为这是一个很简单的问题,但我搜索了很多次都无法弄清楚。

我正在尝试解析以下 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 - 使用 XML::LibXML 解析 XML 的 Perl 脚本;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10404152/

相关文章:

c# - Twilio XML 对 SMS 的响应

javascript - 从另一个下拉列表中选择值时获取下拉列表中的值

ruby - 验证 XML : No matching global declaration available for the validation root

使用 libxml2 计算节点的 Childs 数

android - 如何使用 XML 在 Android 上放大我的图像?

java - 告诉 Jetty 在 webapp 更改时重新加载,而不是 context.xml 更改

perl - 可以在更深层次的绑定(bind)哈希分配上调用 STORE 吗?

c++ - swig c++ 到 perl : not able to execute inherited public method Of base class

perl - 如何将文本日期转换为时间戳?

xml - 如何使用 LibXML 和 Perl 对 XML 条目进行排序?