gpt4 book ai didi

Perl 中的 XML::Simple 未检测所有元素

转载 作者:数据小太阳 更新时间:2023-10-29 02:17:55 27 4
gpt4 key购买 nike

我正在尝试使用 XML::Simple 在 Perl 中解析一些 XML。

XML 遵循以下格式:

   <result>
<doc>
<field name="title">Sample Title</field>
<field name="content">Content 1</field>
<field name="content">Content 2</field>
.
.
.
<field name="content">Content n</field>
</doc>
</result>

使用 XML::Simple 我试图解析它并打印标题和所有内容。问题是只打印了最后一个内容项。我决定使用 Dumper,这就是它返回的内容:

$VAR1= {
'result'=> {
'doc' => [
{
'field' => {
'content' => {
'content' => 'Content n'
},
'title' => {
'content' => 'Sample Title'
}
}
}

每个文档元素只显示最后一个内容项。这有什么理由吗?我该怎么做才能让它检测到所有内容项?

编辑:这是代码:

my $url = "http://www.testurl.com/test.xml";
my $content = get $url;
die "Couldn't get XML" unless defined $content;

my $xml = new XML::Simple;
my $xmlData = $xml->XMLin($content);
print Dumper($xmlData);

最佳答案

根据 POD:

Note 1: The default value for 'KeyAttr' is ['name', 'key', 'id']. If you do not want folding on input or unfolding on output you must setting this option to an empty list to disable the feature.

它将“name”作为ID类型的字段并将元素折叠在一起。

 perl -MXML::Simple -MData::Dumper

my $raw = <<XML_SAMPLE;
<result>
<doc>
<field name="title">Sample Title</field>
<field name="content">Content 1</field>
<field name="content">Content 2</field>
.
.
.
<field name="content">Content n</field>
</doc>
</result>
XML_SAMPLE

my $xml = new XML::Simple;
my $xmlData = $xml->XMLin($raw, KeyAttr => []);
print Dumper($xmlData);

__END__
$VAR1 = {
'doc' => {
'content' => '
.
.
.
',
'field' => [
{
'content' => 'Sample Title',
'name' => 'title'
},
{
'content' => 'Content 1',
'name' => 'content'
},
{
'content' => 'Content 2',
'name' => 'content'
},
{
'content' => 'Content n',
'name' => 'content'
}
]
}
};

关于Perl 中的 XML::Simple 未检测所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8421783/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com