Thread Nochmal XML -.- (4 answers)
Opened by Nordlicht at 2010-10-15 01:06

Nordlicht
 2010-10-15 01:06
#141907 #141907
User since
2005-10-16
182 Artikel
BenutzerIn
[default_avatar]
Sorry, aber muss nochmal nerven... diesmal mit vollständigem Code:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;


my $filename = "base.xml";

my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($filename);

my $query = "/base/text()";

my ($node) = $doc->findnodes($query); # man beachte die Klammern!
$node->setData('bla');

print $doc->toString;


Das funktioniert. Der Wert wird geändert, alles wunderbar. So, jetzt genau das gleiche nochmal, nur mit einer winzigen Änderung:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;


my $filename = "base.xml";

my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($filename);

my $query = "/base/text()";

my $node = $doc->findnodes($query); # <- "my $node" statt "my ($node)"
$node->setData('bla');

print $doc->toString;

Ergebnis:
Code: (dl )
Can't locate object method "setData" via package "XML::LibXML::NodeList" at C:\Xitami\cgi-bin\Forum\director.pl line 15.


So, das erklär mir nun mal Jemand... Ich habe nur die Klammern beim *my* weg gelassen, alles andere ist exakt gleich.
Das ist exakt der Fehler, den ich in meinem anderen Thread nicht benennen konnte. Und da hatte es plötzlich wieder funktioniert, weil die Klammern in dem Beispiel gesetzt waren. Als ich dann meinen eigenen Code schreiben wollte, hab ich die Klammern weg gelassen, weil ich gewohnt bin, solche Klammern nur zu setzen, wenn ich mehrere Variablen erzeugen will:

Code: (dl )
1
2
...
my ($varA, $varB, $varC) = split (...) # zum beispiel so...


...aber für eine einzelne, reicht normalerweise
Code: (dl )
my $var = "blubb"; # << da brauch ich keine Klammern, das funktioniert trotzdem.


So, jetzt seid Ihr dran :)

View full thread Nochmal XML -.-