Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.203 Beiträge
 
Delphi 12 Athens
 
#10

Re: Leerzeichen im string Attribute in XML Datei schreiben

  Alt 27. Aug 2009, 10:35
Zitat von Boro:
Also weis ich eigentlich nicht, wie den Attribut auf CDATA Typ umschalten.
eine DTD schreiben und via <!DOCTYPE> in die XML einbinden

Zitat von Boro:
Da waere ein Beispiel hilflich.
ich weiß jetzt leider auch nicht, wie man sowas effektiv via MSXML macht

aber es gibt für Text diese Möglichkeiten
XML-Code:
<node attr="text" />
<node>text</node>
<node><[CDATA[text]]></node>
wobei man in CDATA die wenigsten Beschränkungen hat und auch keine Normalisierung durchgeführt wird

<[CDATA[text]]> könnte man via .CreateNode und als NodeType ntCData erstellen
aber eventuell gibt es auch eine Vaiante, womit man einem "normalem" Node sagt, daß dessen "Text" in einen CDATA-Bereich rein soll

bei mir (himXML) wäre das recht einfach über Node.asCDATA(True); zu lösen (muß man nur einmal beim Erstellen des Nodes machen) und ab dann werden alle Aufruve von Node.Text und Co. an einen untegeordneten CDATA-Node weitergeleitet und dieser CDATA-Node wird notfalls noch erstellt.



zum Thema "Konvertieren"

mit StringReplace vorm Zuweisen die Leerzeichen in was Anderes umwandeln
und nach dem Auslesen zurück

wenn du es schaffst, daß Leerzeichen als HTML-Code in die XML-Datei reinzubekommen, ohne daß dieses & maskiert wird, dann ginge es auch darüber.

<b attr="&#32;xyz"/> ... aber MSXML maskiert normaler Weise einige Zeichen, wie z.B. das &
und bei .Attributes['attr'] := '&#32;xyz'; steht dann sowas <b attr="&amp;#32;xyz"/> in der Datei.

aber wenn du es schaffst mindestens das erste Leerzeichen als &#32; in die XML-Datei reinzubekommen, dann wandelt dir MSXML dieses &#32; automatisch beim Auslesen in ein Leerzeichen um und entfernt auch dieses und nachfolgene Leerzeichen nicht mehr.
also nur beim Zuweisen mußt du etwas beachten und Auslesen geht dabei ohne Probleme/Umwandlung.

wenn du diese Datei ausließt, dann bekommst du '****xyz' als Attribut-Text zurück ... und es sollte auch für normalen NodeText gelten
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<a>
  <b attr="[b]&[/b]#32;  xyz"/>
  [b][b]&[/b]#32;  xyz</c>
</a>
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat