gpt4 book ai didi

xml - 使用 perl 创建的数据库存储为 xml

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

我正在尝试将复杂的数组/哈希结构保存到 xml。由于我对 perl 和 xml 都不熟悉,所以我不知道最简单的方法是什么。

所有的 xml 解析器、编写器、libxml 等模块都没有给我想要的东西。例如。 DumpXML 添加了很多标签。我尝试了许多不同的模块,但似乎没有一个能满足我的要求,或者我不知道如何设置它们才能让它们按照我的意愿工作。也许我必须在较低级别上编写 xml 部分?或者最好不使用 perl 数据结构,而是将其直接存储到 xml?

想法是从 xml 数据创建一个 php 网页。不幸的是,我也是一个 php 菜鸟,因此我只是希望这样做不会成为一个大问题。 :-)我只是想要 xml 文件的逻辑布局,如下面的示例所示。

以下是我使用 Data::DiverXML::Smart 进行的尝试。

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use Data::Diver qw( Dive DiveRef DiveVal DiveError );
use XML::Smart;

my $content = {};

# Usage: add_content_entry(name, group, descr)
sub add_content_entry {
my $name = shift;
my $group = shift;
my $descr1 = shift;
my $descr2 = shift;

my $data = {
DESCR1 => $descr1,
DESCR2 => $descr2,
};

my @pos = split('/', $group);
push @pos, $name;
DiveVal( $content, @pos ) = $data;
}

sub xml_read {
my $xml = XML::Smart->new('file.xml');
$content = $xml->data;
}

sub xml_write {
my $xml = XML::Smart->new(
q`
<?xml version="1.0" encoding="iso-8859-1" ?>
<content></content>
`);
$xml->{content} = $content;
$xml->('file.xml');
}

# Main
&xml_read; # file.xml is empty

&add_content_entry( 'content.1', 'group.A', 'Hello', 'World' );
&add_content_entry( 'content.2', 'group.B/group.x', 'Fred', 'Flintstone' );
&add_content_entry( 'content.3', 'group.B/group.y', 'bla', 'blah' );
&add_content_entry( 'content.4', 'group.B/group.y', '???', '!!!' );
&add_content_entry( 'content.5', 'group.C/group.z', '...', '...' );

&xml_write; # file.xml is written
$content = {};
&xml_read; # justify that file.xml can be read
print Dumper $content;

输出应该是:

$VAR1 = {
'group.A' => {
'content.1' => {
'DESCR2' => 'World',
'DESCR1' => 'Hello'
}
},
'group.C' => {
'group.z' => {
'content.5' => {
'DESCR2' => '...',
'DESCR1' => '...'
}
}
},
'group.B' => {
'group.y' => {
'content.3' => {
'DESCR2' => 'blah',
'DESCR1' => 'bla'
},
'content.4' => {
'DESCR2' => '!!!',
'DESCR1' => '???'
}
},
'group.x' => {
'content.2' => {
'DESCR2' => 'Flintstone',
'DESCR1' => 'Fred'
}
}
}
};

我的问题是不同内容的级别数不一样。

在 xml 文件中应该有类似的东西(我知道排序是任意的。我保持与 print Dumper 的输出相同)。

<?xml version="1.0" encoding="iso-8859-1" ?>
<content>
<group.A>
<content.1>
<DESCR2>World</DESCR>
<DESCR1>Hello</DESCR1>
</content.1>
</group.A>
<group.C>
<group.z>
<content.5>
<DESCR2>...</DESCR>
<DESCR1>...</DESCR1>
</content.5>
</group.z>
</group.C>
<group.B>
<group.y>
<content.3>
<DESCR2>blah</DESCR>
<DESCR1>bla</DESCR1>
</content.3>
<content.4>
<DESCR2>!!!</DESCR>
<DESCR1>???</DESCR1>
</content.4>
</group.y>
<group.x>
<content.2>
<DESCR2>Flintstone</DESCR>
<DESCR1>Fred</DESCR1>
</content.2>
</group.x>
</group.B>
</content>

<?xml version="1.0" encoding="iso-8859-1" ?>
<content>
<group.A>
<content DESCR2="World" DESCR1="Hello">content.1</content>
</group.A>
<group.C>
<group.z>
<content DESCR2="..." DESCR1="...">content.5</content>
</group.z>
</group.C>
<group.B>
<group.y>
<content DESCR2="blah" DESCR1="bla">content.3</content>
<content DESCR2="!!!" DESCR1="???">content.4</content>
</group.y>
<group.x>
<content DESCR2="Flintstone" DESCR1="Fred">content.2</content>
</group.x>
</group.B>
</content>

最佳答案

你应该看看 DBD::AnyData看看它是否满足您的需求。它支持像使用 SQL 数据库一样使用 XML 文件。

关于xml - 使用 perl 创建的数据库存储为 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6558418/

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