Umlaute und Specialchars in TextNodes
Philipp Hasenfratz
- xml
Halihallo Forumer
<programm>
use strict;
use XML::DOM;
my $doc = XML::DOM::Document->new;
my $root = $doc->createElement( 'root' );
my $text = $doc->createTextNode( 'test äöü äöü test' );
$doc->appendChild($root);
$root->appendChild($text);
print $doc->toString;
</programm>
wie bringe ich XML::DOM bei, folgendes auszugeben ...
test äöü äöü test
... statt ...
test äöü äöü test
? - Ich weiss zwar, warum er die Amp's kodiert, jedoch nicht, wie man das umgehen kann. Muss man die Entities zuerst "registrieren", bevor er sie unkodiert stehen lässt?
Mich interessieren auch andere Fakten, die ich bei der Verwendung von XHTML über XML::DOM zu Wissen habe (gibt's da was zu beachten, muss man XML::DOM einige Sachen "beibringen/zu wissen geben"?).
Viele Grüsse
Philipp
Hallo Philipp,
vielleicht mit:
&auml; etc.
Mich interessieren auch andere Fakten, die ich bei der Verwendung von XHTML über XML::DOM zu Wissen habe (gibt's da was zu beachten, muss man XML::DOM einige Sachen "beibringen/zu wissen geben"?).
Da diese aber alles keine Fragen zu XML sind, habe ich mal das Thema geändert.
Grüße
Thomas
Halihallo Thomas
vielleicht mit:
&auml; etc.
Das gibt mir &auml; aus. Jedes & wird schlicht weg in & umgewandelt. Gibt's eine Möglichkeit, dies mit XML::DOM zu unterbinden?
Mich interessieren auch andere Fakten, die ich bei der Verwendung von XHTML über XML::DOM zu Wissen habe (gibt's da was zu beachten, muss man XML::DOM einige Sachen "beibringen/zu wissen geben"?).
Da diese aber alles keine Fragen zu XML sind, habe ich mal das Thema geändert.
Und wo stellte ich eine Perl-Frage? :-)
Viele Grüsse
Philipp
Halihallo Philipp Hasenfratz (ich liebe Automatismen *g*)
wie bringe ich XML::DOM bei, folgendes auszugeben ...
test äöü äöü test
... statt ...
test äöü äöü test
Tja, leider war ich noch nicht im Stande, die '&' unkodiert ausgeben zu lassen. Hat vielleicht noch wer eine Idee? - Mir werden, um es nochmals zu wiederholen, alle '&' in '&' ersetzt, was zwar normalerweise OK ist, jedoch in meinem Kontext nicht erwünscht ist.
Viele Grüsse
Philipp
PS: Ja, meine Tastatur klemmt und Thomas: Dir zuliebe habe ich auch auf Perl gestellt :-)
Hallo Philipp,
Tja, leider war ich noch nicht im Stande, die '&' unkodiert
ausgeben zu lassen. Hat vielleicht noch wer eine Idee? - Mir
werden, um es nochmals zu wiederholen, alle '&' in '&'
ersetzt, was zwar normalerweise OK ist, jedoch in meinem
Kontext nicht erwünscht ist.
Wie siehts mit perldoc XML::DOM::Entity aus? Und mit
createCDATASection? Aus perldoc XML::DOM:
IMPLEMENTATION DETAILS
[...]
Text and CDATASection nodes
The Expat parser expands EntityReferences and
CDataSection sections to raw strings and does not
indicate where it was found. This implementation
does therefore convert both to Text nodes at parse
time. CDATASection and EntityReference nodes that
are added to an existing Document (by the user)
will be preserved.
Also, subsequent Text nodes are always merged at
parse time. Text nodes that are added later can be
merged with the normalize method. Consider using
the addText method when adding Text nodes.
Gruesse,
CK
Halihallo Christian
Entschuldige die Verspätung und besten Dank für deine Antwort.
Tja, leider war ich noch nicht im Stande, die '&' unkodiert
ausgeben zu lassen. Hat vielleicht noch wer eine Idee? - Mir
werden, um es nochmals zu wiederholen, alle '&' in '&'
ersetzt, was zwar normalerweise OK ist, jedoch in meinem
Kontext nicht erwünscht ist.Wie siehts mit perldoc XML::DOM::Entity aus? Und mit
createCDATASection? Aus perldoc XML::DOM:
Mit CDATA funktioniert es (komisch, als ich das vor langem versucht habe noch nicht... Naja, wohl mein Fehler). Spielt es den Browsern (XHTML) keine Rolle, ob sie normale Textnodes oder CDATASections bekommen? - Die Antwort sollte nein lauten, aber ich frage mal lieber.
Mit XML::DOM::Entity hab ich immer noch Probleme:
---
use strict;
use XML::DOM;
my $doc = XML::DOM::Document->new;
XML::DOM::DocumentType::addEntity( $doc, 0, 'auml', 'ä' );
my $root = $doc->createElement( 'root' );
my $text = $doc->createTextNode( 'test äöü test' );
my $cdat = $doc->createCDATASection( 'test ä test' );
$doc->appendChild($root);
$root->appendChild($text);
$root->appendChild( $cdat );
print $doc->toString;
---
stirbt mir bei XML::DOM::DocumentType::addEntity mit der Fehlermeldung:
"can't call method setNamedItem on an undefined value @ ...". Hätte jemand vielleicht eine Idee, woran dies liegen könnte?
Viele Grüsse
Philipp