Thread Ausgabe von XML::Smart (5 answers)
Opened by zilpzalp at 2013-11-21 20:21

Linuxer
 2013-11-21 23:08
#172146 #172146
User since
2006-01-27
3746 articles
HausmeisterIn

user image
Hi,
ich mache eigentlich einen Bogen um XML und sein Zubehör, hatte aber heute Lust zu knobeln ;-)

Nur mit CPAN:XML::Smart alleine scheint es mir nicht sauber möglich zu sein.
Man kann jeder "loc" und "lastmod" ein Array übergeben und neben dem gewünschten String noch einen "Dummy" String mitgeben; dann generiert CPAN:XML::Smart die gewünschte Struktur. Wichtig ist, dass es innerhalb der Array-Ref mindestens zwei nicht-leere (wahre) Werte gibt, die verarbeitet werden können). Hinterher müsste man dann zusehen, wie man die "Dummy"-Einträge wieder rausbekommt. Recht unschön der Ansatz.

Hier eine Lösung, die ein weiteres Modul (CPAN:XML::Quick) zum Zusammenbauen verwendet:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#! /usr/bin/env perl
use strict;
use warnings;

use XML::Quick;
use XML::Smart;

# Bereite Datenstruktur vor
my %hash = (
    urlset => {
        url => [
            {
                loc     => "http://www.example.com/page1.html",
                lastmod => "2013-11-20",
            },
            {
                loc     => "http://www.example.com/page2.html",
                lastmod => "2013-11-21",
            },
        ],
    },
);

# neue Sitemap auf Basis der Datenstruktur; xml() stammt von XML::Quick; siehe perldoc XML::Quick
my $sitemap = XML::Smart->new(xml(\%hash));

# und raus damit:
print $sitemap->data(), "\n";


__END__


Ergebnis:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8" ?>
<?meta name="GENERATOR" content="XML::Smart/1.78 Perl/5.018001 [linux]" ?>
<urlset>
<url>
<lastmod>2013-11-20</lastmod>
<loc>http://www.example.com/page1.html</loc>
</url>
<url>
<loc>http://www.example.com/page2.html</loc>
<lastmod>2013-11-21</lastmod>
</url>
</urlset>

Last edited: 2013-11-21 23:11:24 +0100 (CET)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Ausgabe von XML::Smart