Thread Aus einer Xml ein XML Value als String lesen (8 answers)
Opened by abs at 2013-07-29 13:46

topeg
 2013-07-29 21:20
#169209 #169209
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Dein Problem ist halt das das eingebettete XML nicht entwertet ist. Wer immer das verzapft hat, hatte von XML nicht viel Ahnung.
Zu dem Zweck gibt es den Spezialtag "CDATA" <![CDATA[ .... ]]> Das sagt dem Parser das er alles innerhalb dieses Tags zu ignorieren ist. Man muss nur noch zusätzlich sicher gestellen, das im Entwerteten XML kein "]]>" steht. Das stellt man sicher, in dem man die drei Zeichen Aufteilt:
"]]>" => "]]]><![CDATA[]>"

Wenn du dir sicher bist, dass im eingebetteten XML kein "</property>" vorkommt kannst du diese Holzhammer Methode verwenden:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
# read XML file in $xml_string

my $out='';
while($xml_string=~s!^(.*?<property>\s*)(<\?xml.+?>)(\s*</property>)!!s){
  $out.=$1.'<![CDATA[';
  my ($in,$after)=($2,$3);
  $in=~s/\Q]]>\E/]]]><![CDATA[]>/gs;
  $out.=$in.']]>'.$after;
}
$xml_string=$out.$xml_string;
$out='';

# parse XML $xml_string ...


das sucht nach <property> <\?xml ... > </property> und ersetzt das durch <property> <![CDATA[<\?xml ... >]]> </property>

Danach kannst du das XML normal parsen und "property" enthält einen String des eingebetteten XML.

Sollte </property> vorkommen wird das ganze schwieriger, da man die XML-Verschachtelung auflösen muss. Man muss das XML partiell parsen.
Last edited: 2013-07-29 21:22:42 +0200 (CEST)

View full thread Aus einer Xml ein XML Value als String lesen