perl - 如何在 Perl 中解析 XML 并创建树结构

标签 perl cpan

我正在用 XML::Simple 解析一个 XML 文件.有没有办法从 XML 中获取树形?如果是这样,请举例说明或建议 CPAN 包。

我想知道在 column 之后我必须处理哪个标签等等。

标签没有顺序。 column 标签可以多次出现在 Tabledisplay_name 之后。

Tab
    column
    Table
        column
    display_name
    column
    display_name

XML:

<Tab>
    <column>
        <display_name>xyz</display_name>
        <display_name>pqr</display_name>
    </column>
    <Table>
        <column><display_name>Department</display_name></column>
    </Table>
    <display_name>abc</display_name>
    <column>pwd</column>
    <display_name>jack</display_name>
</Tab>

使用 XML::Simple 输出:

$VAR1 = {
  'Table' => {
    'column' => {
      'display_name' => 'Department'
    }
  },
  'display_name' => [
    'abc',
    'jack'
  ],
  'column' => [
    {
      'display_name' => [
        'xyz',
        'pqr'
      ]
    },
    'pwd'
  ]
};

预期的 o/p:

$VAR1 = {
  'column' => {
    'display_name' => [
      'xyz',
      'pqr'
    ]
  }
  'Table' => {
    'column' => {
      'display_name' => 'Department'
    }
  }, 
  'display_name' => 'abc',
  'column' => 'pwd',
  'display_name' =>'jack'
};

我知道不可能有具有相同键的散列。请建议我可以维护标签序列并能够打印它们的方法。

最佳答案

XML::LibXML 创建一棵没有信息丢失的树。

use XML::LibXML qw( );
my $parser = XML::LibXML->new();
my $tree = $parser->parse_file($qfn);

您可以从那里生成您指定的输出。 (我不知道你为什么要这样做,因为你想要输出的 Perl 代码在运行时会丢失数据。)

关于perl - 如何在 Perl 中解析 XML 并创建树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16746404/

相关文章:

linux - 通过excel生成的相关值,我想让矩阵看起来均匀

perl - 为什么在 UTF-8 编码的 Perl 脚本中无法识别变音符号 "use utf8"?

perl - 如何测试/分类 CPAN 模块的 utf8 正确性

php - 我什么时候应该使用 Perl CGI 而不是 PHP(反之亦然)?

regex - perl 不区分大小写的开关作为变量?

perl - 转储 XML::LibXML 元素

perl - 如何将 CPAN 模块安装到本地目录中?

perl - 一个 CPAN 模块来解析 google 风格的搜索查询术语?

perl - 有哪些好的 Perl 调试方法?

linux - 安装 CPAN 模块而不弄乱系统 Perl 安装