Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Wie spitze Klammern im Text zulassen? (https://www.delphipraxis.net/68626-wie-spitze-klammern-im-text-zulassen.html)

McMorton 2. Mai 2006 20:56


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:
self.XmlObject.ChildNodes['BLA'].Text := aString; //aString ist hier z.B.: '<Test></Test>'

self.XmlObject.SavetoXML(aString);

//aString ist nun: <BLA>&lt;Test&gt;&lt;/Test&gt;</BLA>
//Ich brauche aber: <BLA><Test></Test></BLA>
ich könnte zwar hinterher die Zeichen austauschen, aber gibt es da ev. eine bessere Lösung?

sh17 2. Mai 2006 21:00

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.

McMorton 2. Mai 2006 21:06

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?

sh17 2. Mai 2006 21:12

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.

OregonGhost 2. Mai 2006 22:55

Re: Wie spitze Klammern im Text zulassen?
 
Wann genau stößt du denn auf ein Problem mit den &lt; und &gt;?
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:
<![CDATA[<Test></Test>]]>
Dabei wird alles, was zwischen den inneren eckigen Klammern liegt, nicht vom Parser interpretiert.

sgmeiner 3. Mai 2006 07:46

Re: Wie spitze Klammern im Text zulassen?
 
Eventuell kannst du ja auch sowas probieren:

Delphi-Quellcode:
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;
Funktioniert natürlich nur, wenn von EditInput (oder sonst woher) ein gültiger XML-Text kommt.

sh17 3. Mai 2006 07:51

Re: Wie spitze Klammern im Text zulassen?
 
Zitat:

Code:
<![CDATA[<Test></Test>]]>

@McMorton
Womit wir bei Deinem redundanten Thread angekommen wären. ;-)

marabu 3. Mai 2006 09:04

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:
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;
Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz