![]() |
XML.AddChild(): Probleme mit Sonderzeichen
Hallo zusammen,
für eine größere Anwendung muss ich Daten aus SQL-Tabellen auch in XML-Dateien exportieren, was auch bereits fast problemlos funktioniert. Dabei habe ich nur das Problem, dass in den Daten der SQL-Tabellen auch Sonderzeichen wie z. B. & enthalten sein können, die bei Xml.AddChild(Firmenname) die Fehlermeldung 'Dieser Name darf nicht das Zeichen '&' enthalten:' auslösen. Kann ich alle problematischen Sonderzeichen irgendwie mit einer Standardfunktion herausfiltern oder durch die entsprechenden Entitäten ersetzen oder mache ich sonst was z. B. mit den Zeichensätzen falsch? Hier ein Ausschnitt aus dem Sourcecode:
Code:
Vielen Dank für eure Antworten,
function SQL2XMLExport(Firmenname: AnsiString): Boolean;
var Xml: IXMLDocument; RootNode: IXMLNode; begin Xml := NewXMLDocument; Xml.Version := '1.0'; Xml.Encoding := 'Windows-1252'; Xml.Options := [doNodeAutoIndent]; RootNode := Xml.AddChild(Firmenname); ... end; Peter |
AW: XML.AddChild(): Probleme mit Sonderzeichen
Texte mit "Illegalen" Sonderzeichen <> & klammert man in CDATA
Delphi-Quellcode:
ggf muss man halt auf das Vorhandensein dieser Sonderzeichen prüfen und den Wert
<![CDATA[
alles erlaubt & <> ]]> entsprechend selbst anpassen
Delphi-Quellcode:
if pos('&',Firmenname)>0 then Firmenname='<![CDATA['+Firmenname+']]>';
|
AW: XML.AddChild(): Probleme mit Sonderzeichen
Geht das nicht so?
Delphi-Quellcode:
Die CDATA-Variante erscheint mir hier wie ein Workaround, der aber nicht nötig sein sollte.
type
Windows1252String = type AnsiString(1252); Var myCompany : Windows1252String; Begin myCompany := 'Palhuber & Söhne'; ... RootNode := myXML.AddChild(myCompany); |
AW: XML.AddChild(): Probleme mit Sonderzeichen
Zitat:
"&", "<", ">", " ", alles vor dem " " (Zeilenumbruch, Tab usw.) und natürlich die Zeichen " und ' sind in Node/Attribut-Namen niemals erlaubt, egal welche Kodierung und abgesehn davon sind diese ASCII-Zeichen sowieso in jeder Kodierung identisch. :roll: Innerhalb von Texten sind sie erlaubt, aber müssen durch die entsprechenden ![]() Welches ordentliche XML-Libs eh automatisch übersetzen. (beim Text) |
AW: XML.AddChild(): Probleme mit Sonderzeichen
Muss wirklich der Attribte-Name der Firmenname sein?
Sollte nicht eher ein Attribut "CompanyName" mit dem Wert des Firmennamens erzeugt werden :?: |
AW: XML.AddChild(): Probleme mit Sonderzeichen
Genau das habe ich mich auch grade gefragt. Vor allem weil dabei Dinge wie das "&" (zumindest bei MS-XML) automatisch übernommen werden.
|
AW: XML.AddChild(): Probleme mit Sonderzeichen
Zitat:
|
AW: XML.AddChild(): Probleme mit Sonderzeichen
Joar, keine Steuer-/Leer-/Punktuationszeichen.
縻 und A0_ĂÞDŽƉҴҖﮚﭞﮊ繃縗 sind (seit 2009) gültige Bezeichner für Typen, Klasse, Variablen, Konstanten, Methoden, Property, Prozeduren, ... Soooo viel Spielraum für eine extrem kompakte Obfuscation des Codes. :stupid: |
AW: XML.AddChild(): Probleme mit Sonderzeichen
Vielen Dank für eure Antworten.
Habe es mal mit einem Attribut getestet, was mir aber weitere Probleme bereitet, da sehr viele Firmen in einer XML-Datei stehen sollen und ich die einzelnen Nodes dann nummerieren oder irgendwie anders als Unikate generieren muss. Seither war es eben der Firmenname, der nur jeweils einmal vor kam und nach dem konnte ich beim Import dann suchen. Kann ich in XML-Dateien auch über eine Standardfunktion nach Attributen suchen? Könnte man nicht die Routine, die die Werte für das Attribut in Entitäten umwandelt, einfach auch für die Wandlung des Node-Namens verwenden? So eine Routine hatte ich eigentlich gesucht... Viele Grüße |
AW: XML.AddChild(): Probleme mit Sonderzeichen
Ich glaube du hast eine völlig falsche Vorstellung von XML-Dateien und deren Aufbau/Struktur.
Hier mal ein Beispiel von ![]()
XML-Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<verzeichnis> <titel>Wikipedia Städteverzeichnis</titel> <eintrag> <stichwort>Genf</stichwort> <eintragstext>Genf ist der Sitz von ...</eintragstext> </eintrag> <eintrag> <stichwort>Köln</stichwort> <eintragstext>Köln ist eine Stadt, die ...</eintragstext> </eintrag> </verzeichnis> |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 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