You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Perl嵌套哈希取值及用XML::LibXML生成指定XML

问题描述

我有如下嵌套结构的Perl哈希:

$VAR1 = {
          'state1' => {
                        'code' => '328',
                        'num' => '179237'
                      },
          'state2' => {
                        'code' => '987',
                        'num' => '0.8736'
                      },
          'state3' => {
                        'code' => '326',
                        'num' => '582048'
                      }
        };

需要将其转换为指定格式的XML:

<Root>

 <Info>
  <statename>state1</statename>
  <code>328</code>
  <num>179237</num>
 </Info>

 <Info>
  <statename>state2</statename>
  <code>987</code>
  <num>0.8736</num>
 </Info>

 <Info>
  <statename>state3</statename>
  <code>326</code>
  <num>582048</num>
 </Info>
 
</Root>

要求使用XML::LibXML库,我尝试了以下代码片段但无法正常运行:

$size = keys %my_hash; 
for(my $i=0; $<=$size;$i++){
 my $tags = $doc->createElement('Info');
 my %tags = 
   statename => 
   code =>
   num => 
}

for my $state_name (sort keys %my_hash){
 my $state_tag = $doc->createElement ($statename);
 my $codetag->appendTextNode($code);
 $num = ->appendChild($statetag) 
}

请求帮助实现完整代码,并提供学习Perl哈希访问及XML生成的相关文档。

完整实现代码

以下是基于XML::LibXML的完整可运行代码,包含哈希访问和XML生成的核心逻辑:

use strict;
use warnings;
use XML::LibXML;

# 定义你的嵌套哈希
my %my_hash = (
    state1 => { code => '328', num => '179237' },
    state2 => { code => '987', num => '0.8736' },
    state3 => { code => '326', num => '582048' },
);

# 初始化XML文档
my $doc = XML::LibXML::Document->new('1.0', 'UTF-8');

# 创建根元素Root
my $root = $doc->createElement('Root');
$doc->setDocumentElement($root);

# 遍历哈希中的每个state
for my $state_name (sort keys %my_hash) {
    # 获取当前state对应的嵌套哈希
    my $state_data = $my_hash{$state_name};
    
    # 创建Info元素
    my $info = $doc->createElement('Info');
    
    # 创建statename元素并添加文本
    my $statename = $doc->createElement('statename');
    $statename->appendTextNode($state_name);
    $info->appendChild($statename);
    
    # 创建code元素并添加文本
    my $code = $doc->createElement('code');
    $code->appendTextNode($state_data->{code});
    $info->appendChild($code);
    
    # 创建num元素并添加文本
    my $num = $doc->createElement('num');
    $num->appendTextNode($state_data->{num});
    $info->appendChild($num);
    
    # 将Info元素添加到根节点
    $root->appendChild($info);
}

# 输出格式化后的XML
print $doc->toString(1);

关键说明

  1. 哈希访问:通过$my_hash{$state_name}获取每个state对应的嵌套哈希,再用$state_data->{code}/$state_data->{num}访问内部字段;
  2. XML构建:使用XML::LibXML的createElement创建节点,appendTextNode添加文本内容,appendChild构建节点层级;
  3. 格式化输出:toString(1)会生成带缩进的可读性XML。
学习资源

Perl哈希与嵌套数据结构

  • perldoc perldsc:Perl官方的数据结构手册,详细讲解哈希、数组及嵌套结构的创建、访问与操作;
  • perldoc perlhash:专注于哈希的基础语法、键值操作、遍历方法的官方文档;

XML::LibXML使用

  • perldoc XML::LibXML:模块的官方文档,包含完整的API说明、节点创建、文档构建、输出的示例代码;
  • perldoc XML::LibXML::Document:针对文档对象的详细操作指南,涵盖初始化、节点添加、格式化输出等功能。

内容的提问来源于stack exchange,提问作者Perl_Newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:10:33