2009-07-01 111 views
4

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

实施例:

<opt> 
    <person firstname="Joe" lastname="Smith"> 
    <email>[email protected]</email> 
    <email>[email protected]</email> 
    </person> 
    <person firstname="Bob" lastname="Smith"> 
    <email>[email protected]</email> 
    </person> 
</opt> 

和我寻找(无<opt>标签):

<person firstname="Joe" lastname="Smith"> 
    <email>[email protected]</email> 
    <email>[email protected]</email> 
    </person> 
    <person firstname="Bob" lastname="Smith"> 
    <email>[email protected]</email> 
    </person> 
+0

如果选择是你的根节点,其结果是无效的XML,它必须有一个根节点。 – Axeman 2009-07-01 15:08:12

回答

13

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

ROOTNAME => '字符串' #出 - 得心应手

默认情况下,当XMLout()生成 XML,根元素将被命名为 '选择'。这个选项可以让你指定一个替代名字 。

为RootName选项指定undef或空 字符串 将生成没有根元素的XML。在 大多数情况下,生成的XML片段 将不会'格式良好',因此 无法通过 XMLin()读回。尽管如此,该选项有 被发现在某些 的情况下有用。

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

use XML::Simple; 

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

上述答案对我无效。你可以做的是:

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

也就是说,一个有效的XML文档应该有一个根。如果你想要做的是命名您的根节点,你可以这样做:

print $xml->XMLout({'RootNodeName' => {'ChildNode'=>[@ArrayOfThings]}}); 
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>