Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Leerzeichen im string Attribute in XML Datei schreiben (https://www.delphipraxis.net/139329-leerzeichen-im-string-attribute-xml-datei-schreiben.html)

Boro 26. Aug 2009 23:33


Leerzeichen im string Attribute in XML Datei schreiben
 
Hi,

ich versuche mit TXMLDocument Daten, meistens Texte, ins XML Datei zu schreiben. Leider verliere ich dabei die Leerzeichen am Anfang des Textes. Z.B.
Delphi-Quellcode:
var MyNode: IXMLNode;
MyNode.SetAttribute('attrib','   meintext');
endet in der XML Datei als <knoten attrib="meintext" /> anstatt <knoten attrib=" meintext" />

Wie kann ich text wie ' etwas' auch mit Leerzeichen am Anfang ins XML Detei speichern?

Danke fur jeden hinweis.

Boro

Luckie 26. Aug 2009 23:34

Re: Leerzeichen im string Attribute in XML Datei schreiben
 
Und was machen wir, wenn jemand im anderen Forum antwortet?

Boro 26. Aug 2009 23:46

Re: Leerzeichen im string Attribute in XML Datei schreiben
 
Zitat:

Zitat von Luckie
Und was machen wir, wenn jemand im anderen Forum antwortet?

Eine Antwort die die Frage beantwortet wurde ich hier bringen.

BUG 26. Aug 2009 23:52

Re: Leerzeichen im string Attribute in XML Datei schreiben
 
Zitat:

Zitat von Luckie
Und was machen wir, wenn jemand im anderen Forum antwortet?

Und warum dürfen wir nicht wissen, dass der andere Beitrag hier zu finden ist :mrgreen:

MfG,
Bug

Boro 27. Aug 2009 00:05

Re: Leerzeichen im string Attribute in XML Datei schreiben
 
Zitat:

Zitat von BUG
Und warum dürfen wir nicht wissen, dass der andere Beitrag hier zu finden ist :mrgreen:

MfG,
Bug

Warum sollte jmnd nicht durfen wissen...
Wuste nicht das es mit dem Link so geht. Danke.
Hoffe, das ich nicht irw Regel brach auch an anderes Forum die Frage zu stellen. Wenn ja, dann bitte ich um Verzeihung.

Luckie 27. Aug 2009 00:12

Re: Leerzeichen im string Attribute in XML Datei schreiben
 
Crosspostings sind nicht schlimm, nur sollte man sie auch verlinken, damit man sieht, was schon beantwortet wurde.

sx2008 27. Aug 2009 01:42

Re: Leerzeichen im string Attribute in XML Datei schreiben
 
Laut XML-Standard werden führende und anhängende Leerzeichen innerhalb eines Attributes entfernt:
http://www.w3.org/TR/REC-xml/#AVNormalize
Zitat:

Zitat von w3.org
If the attribute type is not CDATA, then the XML processor MUST further process the normalized attribute value by discarding any leading and trailing space (#x20) characters

Du könntest jetzt anfangen rumzutricksen und den Attribut Typ auf CDATA setzen, aber ich würde es nicht tun.
Wenn du die Leerzeichen brauchst, dann ist es kein Attribut sondern ein Element.

himitsu 27. Aug 2009 06:50

Re: Leerzeichen im string Attribute in XML Datei schreiben
 
<[CDATA[ ginge

erstell dir eine DTD (Document Type Definition) und definier dein Attribut als #DATA
MSXML sollte diese entsprechend behandeln

maskiere die Leerzeichen

himXML kann das aktuell noch
ist zwar eine Änderung geplant, aber weiter unten auf der ToDo-Liste und wenn, dann soll dieses Verhalten abschaltbar sein

Boro 27. Aug 2009 09:45

Re: Leerzeichen im string Attribute in XML Datei schreiben
 
Danke an sx2008 und himitsu.
Zitat:

Zitat von sx2008
Du könntest jetzt anfangen rumzutricksen und den Attribut Typ auf CDATA setzen, aber ich würde es nicht tun.

Ich verwende XML Binding Wizard (Turbo Delphi Pro) und fur den Attribut steht fur Data Type keine CDATA Moglichkeit da. Also weis ich eigentlich nicht, wie den Attribut auf CDATA Typ umschalten. Wie macht man dies? Auf der w3.org Seite steht
Zitat:

All attributes for which no declaration has been read SHOULD be treated by a non-validating processor as if declared CDATA.
Soll ich den Daten Typ des Attributen einfach leer lassen? Die Property poValidateOnParse hab ich false.
Ehrlich gesagt, im Binding Wizard sehe ich fuer Daten Typ des Elementen (Node) keine Wahl
Zitat:

Zitat von sx2008
Wenn du die Leerzeichen brauchst, dann ist es kein Attribut sondern ein Element.

Wie kann ich abschaetzen ob ein Element oder Attribut zu verwenden?
Die XML Datei brauch ich fur Export der Daten aus mehreren Tabellen zusammen in einer Datei und Hierarchie die einer Relation entspricht. Im Prinzip dachte ich, das ein Datensatz von der Tabelle ein Element sein soll und die Feldern sollen die Attributen sein.


Zitat:

Zitat von himitsu
<[CDATA[ ginge
erstell dir eine DTD (Document Type Definition) und definier dein Attribut als #DATA

Da waere ein Beispiel hilflich. Biss jetzt schrieb ich nur die .xml Datei wie ich mir sie vorstelle. Aus .xml Datei gibt mir der XML Binding Wizard eine Unit fur einfachen Zugriff an XML Dokument.
Zitat:

Zitat von himitsu
maskiere die Leerzeichen

DU meinst Anstatt Leerzeichen eine Substituzion beim schreiben und lesen zu verwenden? Im schlimssten Fall...
Zitat:

Zitat von himitsu
himXML kann das aktuell noch

Danke, vieleicht spaeter. Momentan sieht es mehr danach, es fehlen mir mehr Kentnisse und Erfahrung als eine zusaztliche Klasse oder Unite. Aber gut zu wissen es gibt einen Ausgang...

himitsu 27. Aug 2009 10:35

Re: Leerzeichen im string Attribute in XML Datei schreiben
 
Zitat:

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:

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>


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:40 Uhr.
Seite 1 von 2  1 2      

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