perl - 如何通过 XML::LibXML 添加子和孙 XML 标签?

标签 perl xml-libxml

我正在尝试制作一个简单的 XML 文件并添加 ChildGrandchild XML 标签 XML::LibXML .

我做了countrylocation标签如下,但我想在 country 下添加子标签和孙标签和location标签如 <dev>value</dev> 。如何通过 XML::LibXML 添加子代和孙代 XML 标签?

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

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


my $country = $doc->createElement('country');
$country-> appendText('Jamaica');
$root->appendChild($country);

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


my $location = $doc->createElement('location');
$location-> appendText('21.241.21.2');
$root->appendChild($location);

$doc->setDocumentElement($root);
print $doc->toString(1);

我得到的结果如下:

<?xml version="1.0" encoding="utf-8"?>
<my-root-element some-attr="some-value">
  <country>Jamaica<dev>value</dev></country>
  <location>21.241.21.2</location>
</my-root-element>

实际上,我期望的输出如下

<?xml version="1.0" encoding="utf-8"?>
<my-root-element some-attr="some-value">
  <country>
        <dev>
             <Name>Jameica</Name>
             <field>value</field>
             <range>value1</range>
        </dev>
  </country>
  <country>
        <dev>
             <Name>USA</Name>
             <field>value</field>
             <range>value1</range>
        </dev>
   </country>
</my-root-element>

最佳答案

<country>只有元素,没有文本,你不应该使用 $country->appendText('Jamaica'); 。同样,您不应使用 appendText对于 <dev> .

您还需要在<dev>下创建3个子元素:Name , fieldrange 。对于这些,您需要调用$dev->appendChild

这段代码为您设置了一条获得所需输出类型的路径:

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');

my $country = $doc->createElement('country');
$root->appendChild($country);
    
my $dev = $doc->createElement('dev');
$country->appendChild($dev);

my $name = $doc->createElement('Name');
$name->appendText('Jamaica');
$dev->appendChild($name);

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

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

$doc->setDocumentElement($root);
print $doc->toString(1);

打印:

<?xml version="1.0" encoding="utf-8"?>
<my-root-element some-attr="some-value">
  <country>
    <dev>
      <Name>Jamaica</Name>
      <field>value</field>
      <range>value1</range>
    </dev>
  </country>
</my-root-element>

关于perl - 如何通过 XML::LibXML 添加子和孙 XML 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72978598/

相关文章:

c - Perl:如何将所有内联 C 代码放入单独的文件中?

python延迟执行

perl - 使用 LWP::Authen::OAuth2 访问受 OAuth2 保护的 Google API 时出现问题

perl - XML::LibXML 是否可以解析古怪的标签?

linux - 针对 XSD 进行验证时 perl libXML 崩溃

perl - 在 perl 中使用 xml::Libxml::Xpathcontext 解析具有多个命名空间的 xml

perl - URL : Perl related technology? 中的 .mpl 扩展名

perl - 如何使用 perl 查找 SFTP 中文件的年龄?