Autor |
Beitrag |
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Sa 24.07.04 19:15
Hallo,
ich hab ne XML-Datei mit einigen Nodes. Als Textelement eines Nodes kommt ein ziemlich langer Text rein, der evtl. auch XML-Nodes enthalten kann. Diese sollen aber nicht geparst werden, sondern als Teil des Textes behandelt werden, z.B.:
Quelltext 1:
| <query><command>Test</command><text>Irgendein Test mit XML drin: <query><command>Test</command></query> der nicht geparst werden soll</text></query> |
Beim Auslesen des Nodes soll beim Auslesen des "text"-Nodes "Irgendein Test mit XML drin: <query><command>Test</command></query> der nicht geparst werden soll" rauskommen.
Ich verwende IXMLDocument bzw. den OpenXML-Parser, muss unter beidem laufen.
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 24.07.04 19:27
Das müsste IMHO am einfachsten mit "CDATA" gehen:
Quelltext 1:
| <![CDATA[ <query><command>Test</command></query> ]]> |
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Sa 24.07.04 19:33
OK, gibt es irgendwelche Zeichenkombinationen, die einen CDATA-Abschnitt noch beenden können, außer ]]> ?
Das Problem ist, dass ich wirklich dafür sorgen muss, dass alles reingeschrieben werden kann, was der User will, auch bei längeren Texte. Wenn ich dann nur noch das dieser Zeichenkombination schauen müsste, ginge das noch... kannst Du mir noch ein Beispiel geben, wie CDATA-Abschnitte in IXML verwendet werden?
|
|
mirage228
      
Beiträge: 338
Win 7 Prof.
Delphi 2005 Prof., Delphi 2010 Prof.
|
Verfasst: Sa 24.07.04 19:34
Hi,
imho geht das auch, in dem du für die "<" und ">" die HTML Codes < und > einsetzt.
mfG
mirage228
_________________ May the source be with you, stranger.
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Sa 24.07.04 19:40
Die Frage ist danach nur, welche anderen Kombinationen den Parser iritieren. Außerdem will ich mich nicht durch den ganzen Text hangeln und Zeug ersetzen. Je mehr an etwas gearbeitet werden muss, desto mehr Fehler schleichen sich ein. Ich will das einfach haben und das CDATA scheint mir im Moment das vernünftigste dafür zu sein. Trotzdem danke für den Tipp.
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Sa 24.07.04 19:44
UGrohne hat folgendes geschrieben: | OK, gibt es irgendwelche Zeichenkombinationen, die einen CDATA-Abschnitt noch beenden können, außer ]]> ? |
Laut SelfHTML gibts keine weiteren Zeichenkombinationen zum Beenden eines CDATA-Abschnitts: de.selfhtml.org/xml/...ln/zeichen.htm#cdata
raziel
_________________ JSXGraph
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 24.07.04 20:30
UGrohne hat folgendes geschrieben: | kannst Du mir noch ein Beispiel geben, wie CDATA-Abschnitte in IXML verwendet werden? |
Meinst du erstellen? Das würde bspw. so aussehen (um bei deinem Beispiel von oben zu bleiben  )
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| procedure TForm1.Button1Click(Sender: TObject); var xmldoc : DomDocument40; text1 : IXMLDOMText; cdata : IXMLDOMCDATASection; text : IXMLDOMNode; begin xmldoc := CoDomDocument40.Create; if(xmldoc <> nil) then try xmldoc.loadXML('<query><command>Test</command><text/></query>');
if(xmldoc.parseError.errorCode = 0) then begin text := xmldoc.selectSingleNode('/query/text');
if(text <> nil) then begin text1 := xmldoc.createTextNode('Irgendein Test mit XML drin:'); if(text1 <> nil) then text.appendChild(text1);
cdata := xmldoc.createCDATASection( '<query><command>Test</command></query>'); if(cdata <> nil) then text.appendChild(cdata);
text1 := xmldoc.createTextNode('der nicht geparst werden soll'); if(text1 <> nil) then text.appendChild(text1); end;
ShowMessage(xmldoc.xml); end; finally xmldoc := nil; end; end; |
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: So 25.07.04 21:32
OK, danke für den Tipp, werde ich demnächst mal ausprobieren. Aber das Beste wird sein, wenn ich den ganzen Text in eine CDATA-Section packe... Jetzt muss ich das dann später nur noch in OpenXML hinrkiegen und in meinen Wrapper einbauen. Aber das Code-Fragment hilft schonmal weiter 
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Di 27.07.04 17:40
Es gibt da noch ein Problem: Ich verwende die Unit XMLIntf und nicht msxml, wo IXMLDOMCDATASection deklariert ist. Einbinden von msxml ist leider auch nicht möglich, da sich dann der in beiden Units vorhandene Typ IXMLDocument beißt.
Bisher hab ich leider mit XMLIntf noch keine Möglichkeit gefunden, CDATA-Sections zu erzeugen. Gibt es da eine Möglichkeit?
|
|
BattleFrog
      
Beiträge: 53
WIN 2000
Delphi 7 Ent.
|
Verfasst: Fr 27.01.06 12:01
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Fr 27.01.06 22:33
 Da verwende ich jetzt seit fast eineinhalb Jahren XDOM mit meiner Wrapper-Klasse um unter anderem dieses Problem zu umgehen und dann kommst Du daher und machst mir eines meiner Argumente gegen TXMLDocument zunichte
Danke trotzdem 
|
|