来自以下文件XML::Simple:
不鼓励在新代码中使用此模块.其他模块可用,提供更直接和一致的接口.特别强烈建议使用XML :: LibXML.
该模块的主要问题是大量选项以及这些选项交互的任意方式 - 通常会产生意外结果.
有人可以为我澄清一下这主要原因是什么?
在过去的两个小时左右,我一直在尝试在Ubuntu 12.10上安装XML :: Simple,并且已经正式用完了想法.它在XML :: Parser中失败了.
我做了一个
sudo apt-get install expat
它仍然无法正常工作.这是我得到的错误:
make[1]: Entering directory `/home/<user>/.cpan/build/XML-Parser-2.41-MCLo7T/Expat'
cp Expat.pm ../blib/lib/XML/Parser/Expat.pm
/usr/bin/perl /usr/share/perl/5.14.2/ExtUtils/xsubpp -noprototypes -typemap /usr/share /perl/5.14/ExtUtils/typemap -typemap typemap  Expat.xs > Expat.xsc && mv Expat.xsc Expat.c
cc -c   -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g   -DVERSION=\"2.41\" -DXS_VERSION=\"2.41\" -fPIC "-I/usr/lib/perl/5.14/CORE"   Expat.c
Expat.xs:12:19: fatal error: expat.h: No such file or directory
compilation terminated.
make[1]: *** [Expat.o] Error 1
make[1]: Leaving directory `/home/sclarawu/.cpan/build/XML-Parser-2.41-MCLo7T/Expat'
make: *** [subdirs] Error 2
TODDR/XML-Parser-2.41.tar.gz
/usr/bin/make -- …关于设置返回的XML元素的顺序,我已经在各个地方看到了很少的答案XMLout.但是,我无法使用这些答案/示例解决问题.
我有一个需要输出一些XML数据的脚本,某些元素需要按特定顺序打印.哈希是相当复杂的,我是不是能够通过覆盖达到任何结果sorted_keys的XML::Simple对象.嗯,我做了,但不是我想要的方式.
示例代码如下,问题的详细信息在代码下方.
#!/usr/bin/perl
use strict;
use warnings;
use XML::Simple;
package MyXMLSimple;
use base 'XML::Simple';
sub sorted_keys
{
 my ($self, $name, $hashref) = @_;
 # ... 
 return $self->SUPER::sorted_keys($name, $hashref);
}
package main;
my $xmlParser = MyXMLSimple->new;
my $items = {
 'status' => 'OK',
 'fields' => {
  'i1' => {
   'header' => 'Header 1',
   'max_size' => '3'
  },
  'i2' => {
   'header' => 'Header 2',
   'max_size' => '8'
  }
 },
 'item_list' => {
  'GGG' => …我有以下xml文件
<?xml version="1.0"?>
<!DOCTYPE pathway SYSTEM "http://www.kegg.jp/kegg/xml/KGML_v0.7.1_.dtd">
<pathway name="path:ko01200" org="ko" >
    <entry id="1" >
        <graphics name="one" 
             type="circle" />
    </entry>
    <entry id="7" >
        <graphics name="one" 
             type="rectangle" />
        <graphics name="two" 
             type="rectangle"/>
    </entry>
</pathway>
我厌倦了使用xml简单解析它与下面的代码我被卡住,因为其中一个节点有2个图形元素.所以它抱怨.我假设我必须有另一个foreach循环的图形元素,但我不知道如何继续.
use strict;
use warnings;
use XML::Simple;
use Data::Dumper;
my $xml=new XML::Simple;
my $data=$xml->XMLin("file.xml",KeyAttr => ['id']);
print Dumper($data);    
foreach my $entry (   keys %{$data->{entry}} ) {
    print $data->{entry}->{$entry}->{graphics}->{type}."\n";            
}
这是代码结果
$VAR1 = {
      'entry' => {
                 '1' => {
                        'graphics' => {
                                      'name' => 'one...',
                                      'type' => 'circle'
                                    } …我正在使用XML Simple来解析XML文件,有问题的部分看起来像这样:
    <textBody>
        <title>
            <titlePart>
                <text>SECTION A <emdash/> HUMAN NECESSITIES</text>
            </titlePart>
        </title>
    </textBody>
    <ipcEntry kind="t" symbol="A01" ipcLevel="C" entryType="K" lang="EN">
        <textBody>
            <title>
                <titlePart>
                    <text>AGRICULTURE</text>
                </titlePart>
            </title>
        </textBody>
    </ipcEntry
出于某种原因,XML :: Simple完全忽略了<text>SECTION A <emdash/> HUMAN NECESSITIES</text>
我猜它因为emdash标签,因为<text>AGRICULTURE</text>解析得很好.我还尝试通过以下方式设置解析器:
$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
仍然没有去.任何的想法?
以下是我将使用的XML:
<a>
<id>ABC</id>
<class />
<gender />
</a>
我想编写一个Perl代码,用于搜索标签'id'并将值"ABC"替换为"DEF".
但是,上述XML的嵌套可能会发生变化.因此,我想制作一个通用代码,独立于其确切位置搜索标签'id'.
直到现在我能够获得逻辑,我可以替换ABC中的值,但这使我的代码静态标记'id'的位置.
#!usr/bin/perl
use warnings;
use XML::Simple;
use Spreadsheet::ParseExcel;
use Data::Dumper;
my $FileName = 'sample.xls';
my $xml_file = 'hello.xml';
$par=$ARGV[0];
my $xml = XMLin($xml_file,
    KeepRoot=>1,
    ForceArray=>1,);
$xml->{a}->[0]->{id}='DEF';
XMLout(
    $xml,
    KeepRoot =>1 ,
    NoAttr =>1,
    OutputFile => $xml_file,
        );
    }
我做了这样的练习,如何通过XML :: Simple计算折叠成数组的XML元素的数量,这样我就不必对元素进行硬编码了?我计划使用代码来解析更大的xml文件.我不想通过手册来讨论这些元素.
我可以使用一些计数来代替幻数,有点像person.count或hobbie.length等.我知道,我可以在C#中方便地使用这种说法.
#!/usr/bin/perl -w
use strict;
use XML::Simple;
use Data::Dumper;
my $tree = XMLin('./t1.xml');
print Dumper($tree);
print "\n";
for (my $i = 0; $i < 2; $i++) # magic number '2'
{
    print "$tree->{person}->[$i]->{first_name} $tree->{person}->[$i]->{last_name}\n";
    print "\n";
    for (my $j = 0; $j < 3; $j++) # magic number '3'
    {
        print $tree->{person}->[$i]->{hobbie}->[$j], "\n";
    }
    print "\n";
}
出局:
could not find ParserDetails.ini in C:/Perl/site/lib/XML/SAX
$VAR1 = {
          'person' => [
                      {
                        'hobbie' => …我使用XML :: Simple来解析和编辑一个非常大的XML文件,速度是必不可少的(到目前为止,我已经尝试过所有方法的XML :: Simple是最快的)
现在,一旦我的所有编辑完成,我使用XMLout()将XML打印到文档,尽管它使用适当的缩进打印它,如果这是人类读取但在我的情况下完全没用的话.
没有空格的输出文件是1.2 Mb,白色空间是15 Mb.
我一直在使用:
my $string = XMLout($data);
$string =~ s/>[\s]*</></g;
print $out $string;
但它似乎不仅是一个极端的CPU占用并且需要大量的内存.
他们是一种简单地将我的XML对象作为正确的XML输出而没有所有无用空白的方法吗?
谢谢
我正在尝试运行Perl脚本以将xml文档的所有元素都放入数组中.代码如下:
#!/usr/bin/perl
# Script to illustrate how to parse a simple XML file
# and dump its contents in a Perl hash record.
use strict;
use XML::Simple;
my $xs = new XML::Simple();
my $booklist = $xs->XMLin('./cmn_msg.xml');
print Dumper($data);
当我运行此代码时,我收到一个错误:
Use of tied on a handle without * is deprecated at C:/Perl/lib/XML/Parser/Expat.pm line 447.
not well-formed (invalid token) at line 4, column 14, byte 128 at C:/Perl/lib/XML/Parser.pm line 187
我正在使用为MSWin32-x86-multi-thread构建的ActivePerl(v5.14.1).我试图在Win7上运行此脚本.
所以我有一些像这样的xml文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<root result="0" >
    <settings user="anonymous" >
            <s n="blabla1" >
                    <v>true</v>
            </s>
            <s n="blabla2" >
                    <v>false</v>
            </s>
            <s n="blabla3" >
                    <v>true</v>
            </s>
    </settings>
</root>
我想使用XML Simple进行所有设置.
这是我使用Data :: Dumper打印输出时的内容:
$VAR1 = {
      'settings' => {
                      'user' => 'anonymous',
                      's' => [
                               {
                                 'n' => 'blabla1',
                                 'v' => 'true'
                               },
                               {
                                 'n' => 'blabla2',
                                 'v' => 'false'
                               },
                               {
                                 'n' => 'blabla3',
                                 'v' => 'true'
                               }
                             ]
                    },
      'result' => '0'
    };
这是我的代码
 $xml = new XML::Simple;
 $data …