【问题标题】:add and element to xml file in perl在perl中向xml文件添加和元素
【发布时间】:2011-09-03 00:47:39
【问题描述】:

我有一个xml文件,如下图:

<root>
 <element1>abc</element1>
 <element2>123</element2>
 <element3>456</element3>
</root>

我正在尝试使用 xml:dom 在 perl 中添加和 element4

use XML::DOM;

#parse the file
my $parser = new XML::DOM::Parser;
my $doc = $parser->parsefile ("mytest.xml");
my $root = $doc->getDocumentElement();

my $new_element= $doc->createElement("element4");
my $new_element_text= $doc->createTextNode('testing');
$new_element->appendChild($new_element_text);

$root->appendChild($new_element);

我收到错误: "未定义的子程序 &XML::LibXML::Element::getNodeType"

我尝试了 insetBefore 方法,通过查找元素并尝试在此之前插入它。

任何指针,我做错了什么?

【问题讨论】:

  • 为什么不同时指出错误发生在哪一行?

标签: xml perl insert root


【解决方案1】:

XML::DOM 似乎最后一次更新是在 2000 年,这意味着它不是很受支持的模块。看起来XML::LibXML 提供了非常相似的界面,请参见下面的工作示例:

use XML::LibXML;

my $parser = XML::LibXML->new;
my $doc = $parser->parse_file("mytest.xml");
my $root = $doc->getDocumentElement();

my $new_element= $doc->createElement("element4");
$new_element->appendText('testing');

$root->appendChild($new_element);

print $root->toString(1);

【讨论】:

  • 谢谢 bvr。 LibXml 为我工作,没有任何问题。我想我应该停止使用 XML:DOM
【解决方案2】:

它对我来说很好,并且没有读取 XML::LibXML(它使用 XML::Parser::Expat)。 我安装了 XML::DOM 1.44 版。

当然,您可以尝试安装 XML::LibXML 看看是否能解决问题。

【讨论】:

    【解决方案3】:

    我认为最简单的方法是使用 XML::Simple

    use XML::Simple;
    
    my $xml = XMLin('mytest.xml', ForceArray => 1);
    $xml->{element4} = ['789'];
    open(XML, '>mytest_out.xml');
    binmode(XML, ":utf8");
    print XML '<?xml version="1.0" encoding="UTF-8"?>'."\n".XMLout($xml, RootName => 'root');
    close XML;
    

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多