Wie benutze ich XML::LibXML?
Inhalt:
Beispiel für XML::LibXML mit XPath
Hier ein kurzes Beispiel von ptk:
use XML::LibXML;
my $p = XML::LibXML->new;
my $doc = $p->parse_string(<<EOF);
<TextRectID n="10"/>
EOF
my $root = $doc->documentElement;
print $root->findvalue('/TextRectID/@n'), "\n";
Beispiel für XML::LibXML
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my $file = 'test.xml';
my $parser = XML::LibXML->new();
my $tree = $parser->parse_fh(\*DATA);
my $root = $tree->getDocumentElement();
my @foren = $root->getElementsByTagName('forum');
foreach my $forum(@foren){
print $forum->getAttribute('value'),": ",$forum->textContent(),"\n";
}
__DATA__
<foren>
<forum value="1">
http://board.perl-community.de
</forum>
<forum value="2">
http://perlmonks.org
</forum>
</foren>
Ergänzungen, Kommentare
ThomasChust - 22 Nov 2009 - XPath und XML-Namensräume
Verwendet man die XPath-Funktionalität von
LibXML? bei einem Dokument, das XML-Namensräume nutzt, so muss man auch in den XPath-Ausdrücken Namensraumpräfixes setzen, da sonst einfach keine passenden Knoten gefunden werden. Das Registrieren und Nutzen der Namensräume geht zum Beispiel so:
# XML-Parser erzeugen
my $libxml = XML::LibXML->new();
# XPath-Kontext erzeugen
my $xpath = XML::LibXML::XPathContext->new();
$xpath->registerNs(html => 'http://www.w3.org/1999/xhtml');
# XML-Dokument parsen
my $document = $libxml->parse_string([...]);
# Daten aus dem Dokument extrahieren
my @paragraphs = $xpath->findnodes('//html:p[@html:class="important"]', $document);
In Verbindung mit LWP::Simple kann man so leicht Informationen aus dem Netz gewinnen
Kommentare werden am besten in folgender Form vorgenommen, damit sie im Inhaltsverzeichnis angezeigt werden (natürlich ohne das <verbatim>):
---+++ Main.??? - 14 Jul 2003 - Betreff