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

如何通过XML::LibXML添加XML子标签及孙级嵌套节点

问题根因

你的代码生成的结构不符合预期,是三处写法错误导致的:

  • 直接对country节点调用appendText('Jamaica'),把国家名写成了country节点的直接文本,而不是dev下Name孙节点的内容
  • 节点嵌套逻辑错误:创建dev节点后直接给它加了文本value,没有继续在dev下挂载Name、field、range三个子节点
  • 额外创建了预期结构里不存在的location节点,且没有生成第二个USA对应的country节点
修正后可运行代码
use strict;
use warnings;
use XML::LibXML;

my $doc = XML::LibXML::Document->new('1.0', 'utf-8');
my $root = $doc->createElement('my-root-element');
$root->setAttribute('some-attr'=> 'some-value');

# 复用生成country节点的逻辑,传入国家名即可快速生成多个同结构节点
sub build_country_node {
    my ($doc, $name) = @_;
    my $country = $doc->createElement('country');
    my $dev = $doc->createElement('dev');

    # 逐个创建dev下的孙节点
    my $name_elem = $doc->createElement('Name');
    $name_elem->appendText($name);
    $dev->appendChild($name_elem);

    my $field_elem = $doc->createElement('field');
    $field_elem->appendText('value');
    $dev->appendChild($field_elem);

    my $range_elem = $doc->createElement('range');
    $range_elem->appendText('value1');
    $dev->appendChild($range_elem);

    $country->appendChild($dev);
    return $country;
}

# 追加两个国家节点
$root->appendChild(build_country_node($doc, 'Jamaica'));
$root->appendChild(build_country_node($doc, 'USA'));

$doc->setDocumentElement($root);
print $doc->toString(1);
运行效果

执行代码后会输出和你预期完全一致的XML结构:

  • 根节点携带some-attr="some-value"属性
  • 根下包含两个平级的country节点
  • 每个country节点下嵌套dev子节点
  • 每个dev节点下嵌套Name/field/range三个孙节点,文本内容完全匹配预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:27:14