xml - 如何使用 Perl 的 XML::Simple 从 XML 文件中提取值?

标签 xml perl

考虑到 XML::Simple 是唯一可以使用的模块,我陷入了从 XML 中检索值的困境。结构如下:

<testxml>
    <dev>
        <A>
            <tables>
                <datatables>
                    <table>a1</table>
                    <table>a2</table>
                    <table>a3</table>
                </datatables>
                <propertytables>
                    <table>A1</table>
                    <table>A2</table>
                </propertytables>
            </tables>
        </A>
        <B>
            <tables>
                <datatables>
                    <table>b1</table>
                    <table>b2</table>
                </datatables>
                <propertytables>
                    <table>B1</table>
                    <table>B2</table>
                </propertytables>
            </tables>
        </B>
    </dev>
</testxml>

XMLOut 是:

<opt>
  <dev name="A">
    <tables name="datatables">
      <table>a1</table>
      <table>a2</table>
      <table>a3</table>
    </tables>
    <tables name="propertytables">
      <table>A1</table>
      <table>A2</table>
    </tables>
  </dev>
  <dev name="B">
    <tables name="datatables">
      <table>b1</table>
      <table>b2</table>
    </tables>
    <tables name="propertytables">
      <table>B1</table>
      <table>B2</table>
    </tables>
  </dev>
</opt>

如何检索针对这种情况的表数组:
dev name = "B"和tables name = "propertytables"# 输出B1, B2

最佳答案

XML::Simple 并不是用于此角色的唯一模块。对于这样的事情,我会使用 XML::LibXML 和一些 XPath。

但是如果您想使用 XML::Simple,我发现最好的方法是使用 Data::Dumper 转储 XML::Simple 构建的数据结构,并使用该转储来找出最佳的行走方式结构。就您而言,这非常简单。

#!/usr/bin/perl

use strict;
use warnings;

use XML::Simple;
use Data::Dumper;

my $xml = do { local $/; <DATA> };

my $doc = XMLin($xml);

# print Dumper $doc;

my $dev = 'B';
my $table = 'propertytables';

foreach (@{$doc->{dev}{$dev}{tables}{$table}{table}}) {
  print "$_\n";
}

__END__
<opt>
  <dev name="A">
    <tables name="datatables">
      <table>a1</table>
      <table>a2</table>
      <table>a3</table>
    </tables>
    <tables name="propertytables">
      <table>A1</table>
      <table>A2</table>
    </tables>
  </dev>
  <dev name="B">
    <tables name="datatables">
      <table>b1</table>
      <table>b2</table>
    </tables>
    <tables name="propertytables">
      <table>B1</table>
      <table>B2</table>
    </tables>
  </dev>
</opt>

关于xml - 如何使用 Perl 的 XML::Simple 从 XML 文件中提取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3770813/

相关文章:

c - 我怎样才能让 Module::Build 编译和链接我的小 C 程序?

java - 如何解析从 list 中的 Intent 过滤器接收到的内容数据?

java - 当应用程序被终止时,在 LinearLayout 中安全地动态创建 View

linux - 如何在 linux 中查看 stderr 输出

regex - 如何使用正则表达式去除字符串中多余的空格

python - 如何使用 python 通过另一个脚本运行一个文件中的列表

regex - 在一行匹配后替换为第 N 行中存在的字符串

python - 如何在Python中添加包含 ":"的xml标签

java - 在非映射元素上产生 JAXB 错误

javascript - 使用带有 jquery 的 attr() 保持大写(区分大小写)