XML in Perl zusammenstellen
Ich muss API-Aufrufe an einen NetApp-Filer senden. Ich weiß, welches unformatierte XML ich senden muss:
<? xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE netapp SYSTEM "file:/etc/netapp_filer.dtd">
<netapp version="1.7" vfiler="somevfiler" xmlns="http://www.netapp.com/filer/admin">
<nfs-exportfs-list-rules>
<pathname>/vol/path/to/somewhere</pathname>
</nfs-exportfs-list-rules>
</netapp>
achdem ich mit dem Zusammenstellen als "Nur-Text" begonnen habe, habe ich versucht, es mit "@" besser zu macheXML::Twig
.
Aber ich habe Schwierigkeiten beim Einfügen der ersten beiden Zeilen, da sie nicht Teil des XML-Baums sind.
Ich habe ausgegrabenXML::Twig::Elt
und herausgefunden, ich muss wahrscheinlichset_pi
, um die erste Zeile zu erhalten, aber ... nun, ich habe einige Schwierigkeiten mit der gewünschten Ausgabe.
Bis jetzt habe ich:
use strict;
use warnings;
use XML::Twig;
my $content = XML::Twig::Elt->new(
'netapp',
{ version => 1.7,
vfiler => "somevfiler",
xmlns => "http://www.netapp.com/filer/admin",
},
);
$content->insert_new_elt('nfs-exportfs-list-rules')
->insert_new_elt( 'pathname', '/vol/path/to/somewhere' );
$content->set_pretty_print('indented');
$content->print;
und separat:
my $header = XML::Twig::Elt -> new () -> set_pi('xml', 'version="1.0" encoding="utf-8"');
$header -> print;
Für den DOKTYP habe ich:
my $twig = XML::Twig -> new ();
$twig -> set_root($content);
$twig -> set_doctype('netapp SYSTEM "file:/etc/netapp_filer.dtd"');
$twig -> print;
Aber was ich nicht herausfinden kann, ist, wie man den Header 'zusammenführt'. Wenn ich ein einfaches mache:
$twig -> root -> set_pi('xml', 'version="1.0" encoding="utf-8"');
It verstopft den Inhalt. Was vermisse ich hier? Gibt es eine bessere Möglichkeit, dieses initiale @ einzufügexml
Linie
Ich habe gefunden:Wie kann man das <! Doctype> -Tag und <? xml version = "1.0"?> im xml-Zweig lesen und ändern?
Aber das funktioniert nicht ganz, weil ich diese Zeile brauche - vor meinem doctype.
Z.B.
my $twig = XML::Twig -> new ( 'pretty_print' => 'indented' );
$twig -> set_root($content);
$header -> move ( before => $twig -> root );
$twig -> set_doctype('netapp SYSTEM "file:/etc/netapp_filer.dtd"');
$twig -> print;
Produces:
<!DOCTYPE netapp SYSTEM "file:/etc/netapp_filer.dtd">
<?xml version="1.0" encoding="utf-8"?><netapp version="1.7" vfiler="somevfiler" xmlns="http://www.netapp.com/filer/admin">
<nfs-exportfs-list-rules>
<pathname>/vol/path/to/somewhere</pathname>
</nfs-exportfs-list-rules>
</netapp>
Was in der Nähe ist, aber nicht ganz da ...