如何删除XML :: Simple输出中的<opt>标记?</opt>

时间:2009-07-01 09:10:39

标签: ruby xml perl

我正在使用Perl和XML::Simple模块创建XML文件。我成功创建了XML文件,但问题是我的每个标签都有<opt> </opt>标记。我正在寻找可以使用<opt> </opt>标签的任何选项。我无法进行后处理以删除标签。因为文件很大。

示例:

<opt>
  <person firstname="Joe" lastname="Smith">
    <email>joe@smith.com</email>
    <email>jsmith@yahoo.com</email>
  </person>
  <person firstname="Bob" lastname="Smith">
    <email>bob@smith.com</email>
  </person>
</opt>

我正在寻找(没有<opt>标签):

  <person firstname="Joe" lastname="Smith">
    <email>joe@smith.com</email>
    <email>jsmith@yahoo.com</email>
  </person>
  <person firstname="Bob" lastname="Smith">
    <email>bob@smith.com</email>
  </person>

3 个答案:

答案 0 :(得分:13)

标记是从用户提供的数据结构生成的XML的根元素。 来自XML::Simple文档 -

  

RootName =&gt; 'string'#out - handy

     

默认情况下,生成XMLout()时   XML,根元素将被命名   '选择'。此选项允许您   指定替代名称。

     

指定undef或空   RootName选项的字符串将   生成没有根元素的XML。在   大多数情况下生成的XML片段   不会'形成'和   因此无法读回来   XMLin()。不过,该选项有   被发现在某些方面很有用   情况。

要将根元素设置为空白,只需将RootName作为'undef'传递给XMLout,例如。

use XML::Simple;

my $xml = XMLout($hashref, RootName => undef);

答案 1 :(得分:1)

我在搜索相同的信息(读取,解析,修改和输出xml,修复<opt>根标记)时遇到了这个答案,但是在Ruby中。

仅供参考,根节点也可以在库的Ruby version中删除或命名:

require 'xmlsimple' # gem install xml-simple
data = XmlSimple.xml_in(filename)  # read data from filename
# Parse data as needed, then output:
XmlSimple.xml_out(data, { 'RootName' => nil })     # Remove root element
XmlSimple.xml_out(data, { 'RootName' => 'html' })  # Change root <opt> to <html>

答案 2 :(得分:0)

上述答案对我不起作用。你能做的是:

my $xml = XML::Simple->new(KeepRoot=>0);
print $xml->XMLout($YourVariable);

也就是说,有效的XML文档应该有一个根。如果您要执行的操作是命名根节点,则可以执行以下操作:

print $xml->XMLout({'RootNodeName' => {'ChildNode'=>[@ArrayOfThings]}});