Perl XMLout文件与输入文件的格式不匹配

时间:2014-05-08 16:20:10

标签: xml perl

我出于某些工作原因使用旧版本的Perl,v5.6.1

我做了以下事情:

#!usr/bin/env perl
use warnings;
use strict;
use Data::Dumper;
use XML::Simple;

my $xml = new XML::Simple;  # create object
my $inputxml = $xml->XMLin("C:\\original.xml");
print "\nInput XML File read... OK\n\n";

my $path = "C:\\output.xml";
open my $fh, ">", $path or die "$0: open $path: $!";
print $fh XMLout($inputxml);
close $fh or warn "$0: close $path: $!";

我必须在上面的方法中写入文件,因为下面的方法不起作用:

#my $outputfile = $xml->XMLout($inputxml, OutputFile => 'output.xml');

如果仔细观察,output.xml根本不符合original.xml。新编写的output.xml文件如下所示:

</InstanceOverride>
<InstanceOverride name="NetworkInterfaces">
  <CELL mlinkType="0" ethInterfaceName="#0" name="RtfCsm" />
</InstanceOverride>

而不是看起来像:

<InstanceOverride>
    <NetworkInterfaces>
        <CELL>
            <RtfCsm
              mlinkType="0"
              ethInterfaceName="#0"/>
        </CELL>
    </NetworkInterfaces>
</InstanceOverride>

但它们都是xml。如何修复此输出格式?我不能使用这种新的wierd格式,我需要原始的XML格式。什么是SAX格式?

我需要帮助!

这是另一个用于测试foo.xml的输入XML文件:

<?xml version="1.0" encoding="UTF-8"?><Deploy xmlns="http://www.dnsleak.com/view">    <SystemWideOverride>
        <Bearers>
            <ENB>
                <DrbProfile
                  instanceNumber="7">
                    <PdcpProfile
                      DlDataForwarding="false"
                      UlDataForwarding="false"/>
                </DrbProfile>
            </ENB>
        </Bearers>
    </SystemWideOverride>
</Deploy>

1 个答案:

答案 0 :(得分:2)

XML::Simple将其XML存储为哈希哈希值。当您输出这些哈希值时,很可能会得到完全不同的输出。毕竟,哈希没有设置顺序,因此您的XML实体订单很可能会有所不同。此外,在一系列哈希中可以通过多种方式实现特定的XML语法 - 这就是您所遇到的。

您可以尝试使用各种参数和方法来调整XML::Simple以执行您想要的操作。但是,此警告嵌入XML::Simple文档中的原因是:

  

不鼓励在新代码中使用此模块。其他模块可用,提供更直接和一致的接口。特别强烈建议使用XML :: LibXML。

     

此模块的主要问题是大量选项以及这些选项交互的任意方式 - 通常会产生意外结果。

我仍然使用XML::Simple作为一种快速而又脏的方法来解析XML文件以进行分析 - 例如,解析Ant build.xml文件以找出正在构建jar文件的目标。但是,我不会依赖它来保持我的XML结构准确。