Siechfred: XML mit Sonderzeichen mittels regexp maskieren

Beitrag lesen

aber wie würde denn der RegExp aussehen, wenn ich bspw.
<vorname>Hallo Thomas </vorname>
"filtern" wollte?

Das ist nicht ganz so trivial, da die Sonderzeichen ja nur im String, nicht aber um die Elemente herum maskiert werden sollen. Entweder du wirfst einen XML-Parser an, der dir den Textinhalt liefert, den du dann behandelst, oder du musst einen entsprechenden RegExp bauen. Kleines Beispiel, das du natürlich deinen Bedürfnissen entsprechend ausbauen müsstest:

use strict;  
use diagnostics;  
use [link:http://search.cpan.org/~gaas/HTML-Parser-3.56/lib/HTML/Entities.pm@title=HTML::Entities];  
  
my $xml = '<foo>"1 > 0"</foo>';  
$xml =~ s/(?<=\<foo\>)(.*)(?=\<\/foo\>)/[link:http://search.cpan.org/~gaas/HTML-Parser-3.56/lib/HTML/Entities.pm#encode_entities@title=encode_entities]($1, '<>&"\'')/e;  
print $xml;

Das gibt dir aus:

<foo>&quot;1 &gt; 0&quot;</foo>

Wichtig ist der e-Modifier, der dafür sorgt, dass die Funktion encode_entitities bei der Ersetzung ausgeführt wird. Und weil es ja nur um XML geht, kannst du HTML::Entities anweisen, welche Zeichen es ersetzen soll.

Siechfred

--
Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.