![]() |
Wie spitze Klammern im Text zulassen?
Hallo
Ich habe eine Frage zum MSXML-Parser. Ich habe mit dem Parser eine XML-Struktur erstellt. Einem Knoten kann über eine Eingabefeld Text zugewiesen werden. Jetzt kann es aber passieren das dieser Text auch ein XML-Tag ist. Der Parser ersetzt nun (beim Parsen) die Klammern durch die Zeichen < und > . Kann ich das irgentwie verhindern (also das die Klammern bleiben)?
Delphi-Quellcode:
ich könnte zwar hinterher die Zeichen austauschen, aber gibt es da ev. eine bessere Lösung?
self.XmlObject.ChildNodes['BLA'].Text := aString; //aString ist hier z.B.: '<Test></Test>'
self.XmlObject.SavetoXML(aString); //aString ist nun: <BLA><Test></Test></BLA> //Ich brauche aber: <BLA><Test></Test></BLA> |
Re: Wie spitze Klammern im Text zulassen?
Du möchstest also, das <test> ein vollwertiger Knoten des XML-Dokumentes ist? Dann musst Du ihn auch als Knoten im Dokument einfügen.
|
Re: Wie spitze Klammern im Text zulassen?
Ja. Aber wie mach ich das denn? Es ist ja nicht immer ein Tag.
Manchmal ist es auch nur ein Text (je nachdem was der Benutzer eingibt). Müsste ich dan prüfen, ob es ein gültiges XML-Element ist? Wen ja: als Knoten einbinden, wen nicht, nur als Text einbinden? |
Re: Wie spitze Klammern im Text zulassen?
Du könnstest Dir auch eine eigene Prozedur schreiben, in der Du selbst die Daten in die XML-Datei speicherst. Dann liegt es an Dir, was Du raus schreibst.
|
Re: Wie spitze Klammern im Text zulassen?
Wann genau stößt du denn auf ein Problem mit den < und >?
Das ist ja schon sinnvoll, dass die spitzen Klammern durch die entsprechenden Zeichen ersetzt werden, sonst kriegt der Parser gewaltige Probleme. Einzige Möglichkeit, die mir auf Anhieb einfiele, wäre, den Text in CDATA-Tags zu setzen, sähe dann so aus:
Code:
Dabei wird alles, was zwischen den inneren eckigen Klammern liegt, nicht vom Parser interpretiert.
<![CDATA[<Test></Test>]]>
|
Re: Wie spitze Klammern im Text zulassen?
Eventuell kannst du ja auch sowas probieren:
Delphi-Quellcode:
Funktioniert natürlich nur, wenn von EditInput (oder sonst woher) ein gültiger XML-Text kommt.
procedure TForm1.ButtonClick(Sender: TObject);
var MainDoc, TempDoc: DOMDocument40; RootNode, DataNode: IXMLDOMNode; begin MainDoc := CoDOMDocument40.Create; RootNode := MainDoc.appendChild(MainDoc.createElement('hauptknoten')); DataNode := RootNode.appendChild(MainDoc.createElement('userdaten')); TempDoc := CoDOMDocument40.Create; TempDoc.loadXML(EditInput.Text); if Assigned(TempDoc.firstChild) then DataNode.appendChild(TempDoc.firstChild) else DataNode.text := EditInput.Text; Memo.Text := MainDoc.xml; end; |
Re: Wie spitze Klammern im Text zulassen?
Zitat:
Womit wir bei Deinem redundanten Thread angekommen wären. ;-) |
Re: Wie spitze Klammern im Text zulassen?
Hallo.
Ich würde bei der Eingabe prüfen, ob der Benutzer gültigen XML-Code bereitstellt und den String in Abhängigkeit davon weiter verarbeiten:
Delphi-Quellcode:
Grüße vom marabu
uses
MSXML2; procedure TDemoForm.ButtonClick(Sender: TObject); var doc, tmp: IXMLDOMDocument; s: String; begin doc := CoDomDocument.Create; doc.async := false; doc.documentElement := doc.createElement('root'); tmp := CoDomDocument.Create; tmp.async := false; s := '<test>marabu</test>'; if InputQuery('Input', 'XML', s) then if tmp.loadXML(s) then doc.documentElement.appendChild(tmp.documentElement) else doc.documentElement.appendChild(doc.createTextNode(s)); ShowMessage(doc.xml); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz