Moin zusammen,
mglw. habe ich da einen Bug in der xml-lib entdeckt (Pb 4.40 x86) und vielleicht kann das mal wer validieren:
wenn ich ein xml-File mittels LoadXML() geladen habe und es anschliessen wieder mit SaveXML() abspeichere werden sog. inline-Elemente zerschossen. Konkretes Beispiel:
aus:
<?xml version="1.0"?>
<text>Ich bin ein CDATA Text und werde später mal ab <hervorheben>hier irgendwie hervorgehoben, z.B. durch Fettdruck. Aber ab </hervorheben>hier werde ich wieder normal dargestellt.</text>
wird:
<?xml version="1.0"?>
<text>
Ich bin ein CDATA Text und werde später mal ab h
<hervorheben>
hier irgendwie hervorgehoben, z.B. durch Fettdruck. Aber ab
</hervorheben>
ier werde ich wieder normal dargestellt.
</text>
...man beachte das "h". Das stand vor dem Lade/Speicher-Vorgang hinter dem inline-Tag; bei einem weiteren Lade/Speicher-Vorgang wird übrigens das nächste Zeichen, also "i" verschoben usw.
Bislang kann ich das nur kompensieren, indem ich vor jedem Ladevorgang auf Textebene eine "Vorformatierung" durchführe. Für das Beispiel sieht das dann so aus:
aus:
<?xml version="1.0"?>
<text>
Ich bin ein CDATA Text und werde später mal ab
<hervorheben>
hier irgendwie hervorgehoben, z.B. durch Fettdruck. Aber ab
</hervorheben>
hier werde ich wieder normal dargestellt.
</text>
wird:
<?xml version="1.0"?>
<text>
Ich bin ein CDATA Text und werde später mal ab<hervorheben>
hier irgendwie hervorgehoben, z.B. durch Fettdruck. Aber ab
</hervorheben>hier werde ich wieder normal dargestellt.
</text>
...aber das kanns ja eigentlich nicht sein, oder?
SaveXML() Fehler
- PureBuster
- Beiträge: 40
- Registriert: 30.05.2008 09:54
- Computerausstattung: erbärmlich
- Wohnort: Niedersachsen / Bremen
SaveXML() Fehler
...coden ist wie zum Psychoklempner gehn...manchmal muss man einfach drüber reden..
Re: SaveXML() Fehler
doch, ist so. Das ist kein Bug im Expat-Parser.PureBuster hat geschrieben:...aber das kanns ja eigentlich nicht sein, oder?
Du musst Dich selber darum kümmern, was Du in die Nodes und Attribute
schreibst und gegebenenfalls kritische Zeichen vorher entweder encoden
oder mit CDATA klammern.
... oder Du benutzt den MSXML-Parser (in Kombination mit COMate). Dieser
hat die 'Komfort'-Funktionalität, dass er selber den Inhalt 'entschärft'.
Grüße ... Kiffi
a²+b²=mc²
- PureBuster
- Beiträge: 40
- Registriert: 30.05.2008 09:54
- Computerausstattung: erbärmlich
- Wohnort: Niedersachsen / Bremen
Re: SaveXML() Fehler
Ok, wenns denn so sein soll. Falls wer die Vorformatierung braucht:
Code: Alles auswählen
If newstring$
NewList row_newstring.s()
;Zeilenumbruch nach jedem Tag erzwingen
While FindString(newstring$,">",1) And FindString(newstring$, ">",1) < Len(newstring$); nach jedem Tag
toAddToList.i = FindString(newstring$,">",1)
AddElement(row_newstring.s())
row_newstring.s() = Mid(newstring$, 1, toAddToList)
newstring$ = Mid(newstring$,toAddToList + 1)
Wend
If newstring$ <> ""
AddElement(row_newstring.s())
row_newstring.s() = newstring$
EndIf
;Zeilenumbruch vor jedem Tag erzwingen
ForEach row_newstring.s()
If FindString(row_newstring.s(),"<",1) And FindString(row_newstring.s(),"<",1) >1; vor jedem Tag
tosplit.i = FindString(row_newstring.s(), "<",1)
tosplitGet$ = Mid(row_newstring.s(), tosplit) ; was danach steht
row_newstring.s() = Mid(row_newstring.s(), 1, tosplit -1)
AddElement(row_newstring.s())
row_newstring.s() = tosplitGet$
EndIf
Next
EndIf
;und alle Listenitems in eine Datei(1) schreiben:
ForEach row_newstring.s()
If row_newstring.s() <> "" And row_newstring.s() <> Chr(10)
WriteStringN(1,row_newstring(),#PB_UTF8)
EndIf
Next
...coden ist wie zum Psychoklempner gehn...manchmal muss man einfach drüber reden..
Re: SaveXML() Fehler
ok. hab's grade nochmal getestet.
Dein Problem hängt wahrscheinlich damit zusammen, dass Du
eine im UTF-8 - Format gespeicherte XML-Datei lesen willst,
jedoch Deinen Code selber nicht auf Unicode umgestellt hast.
Mach das mal und Du wirst sehen, dass LoadXML() und
SaveXML() wie gewünscht funktionieren.
Grüße ... Kiffi
Dein Problem hängt wahrscheinlich damit zusammen, dass Du
eine im UTF-8 - Format gespeicherte XML-Datei lesen willst,
jedoch Deinen Code selber nicht auf Unicode umgestellt hast.
Mach das mal und Du wirst sehen, dass LoadXML() und
SaveXML() wie gewünscht funktionieren.
Grüße ... Kiffi
a²+b²=mc²
- PureBuster
- Beiträge: 40
- Registriert: 30.05.2008 09:54
- Computerausstattung: erbärmlich
- Wohnort: Niedersachsen / Bremen
Re: SaveXML() Fehler
100%-Treffer THX 

...coden ist wie zum Psychoklempner gehn...manchmal muss man einfach drüber reden..
Re: SaveXML() Fehler
Der Tipp ist Gold wert. Danke. Und das auch nach so langer Zeit...
(Win 11 64-bit, PB 6.04 und 6.10)