AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi XML.AddChild(): Probleme mit Sonderzeichen
Thema durchsuchen
Ansicht
Themen-Optionen

XML.AddChild(): Probleme mit Sonderzeichen

Ein Thema von Peter Müller · begonnen am 26. Okt 2014 · letzter Beitrag vom 6. Nov 2014
Antwort Antwort
Seite 1 von 2  1 2      
Peter Müller

Registriert seit: 15. Mär 2006
Ort: Stuttgart
22 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

XML.AddChild(): Probleme mit Sonderzeichen

  Alt 26. Okt 2014, 19:49
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:
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;
Vielen Dank für eure Antworten,

Peter
"Der Erfolg besteht manchmal in der Kunst, das für sich zu behalten, was man nicht weiß." Sir Peter Ustinov
  Mit Zitat antworten Zitat
hstreicher

Registriert seit: 21. Nov 2009
220 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: XML.AddChild(): Probleme mit Sonderzeichen

  Alt 27. Okt 2014, 07:58
Texte mit "Illegalen" Sonderzeichen <> & klammert man in CDATA
Delphi-Quellcode:
<![CDATA[
alles erlaubt & <>
]]>
ggf muss man halt auf das Vorhandensein dieser Sonderzeichen prüfen und den Wert
entsprechend selbst anpassen

if pos('&',Firmenname)>0 then Firmenname='<![CDATA['+Firmenname+']]>';
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: XML.AddChild(): Probleme mit Sonderzeichen

  Alt 27. Okt 2014, 08:53
Geht das nicht so?
Delphi-Quellcode:
type
  Windows1252String = type AnsiString(1252);

Var
  myCompany : Windows1252String;

Begin
  myCompany := 'Palhuber & Söhne';
  ...
  RootNode := myXML.AddChild(myCompany);
Die CDATA-Variante erscheint mir hier wie ein Workaround, der aber nicht nötig sein sollte.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: XML.AddChild(): Probleme mit Sonderzeichen

  Alt 27. Okt 2014, 08:59
Geht das nicht so?
Nein.

"&", "<", ">", " ", 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.

Innerhalb von Texten sind sie erlaubt, aber müssen durch die entsprechenden Entities ersetzt werden. (abgesehn von den Leer- und Steuerzeichen, welche aber als Leerzeichen eingelesen würden, wenn nicht kodiert oder z.B. in CDATA)
Welches ordentliche XML-Libs eh automatisch übersetzen. (beim Text)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (27. Okt 2014 um 09:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: XML.AddChild(): Probleme mit Sonderzeichen

  Alt 27. Okt 2014, 09:00
Muss wirklich der Attribte-Name der Firmenname sein?
Sollte nicht eher ein Attribut "CompanyName" mit dem Wert des Firmennamens erzeugt werden
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: XML.AddChild(): Probleme mit Sonderzeichen

  Alt 27. Okt 2014, 09:20
Genau das habe ich mich auch grade gefragt. Vor allem weil dabei Dinge wie das "&" (zumindest bei MS-XML) automatisch übernommen werden.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: XML.AddChild(): Probleme mit Sonderzeichen

  Alt 27. Okt 2014, 13:23
Ich war nur auf die Sonderzeichen aus. Knotenname geht so natürlich nicht und darf es auch nicht. Wozu gibt es eine XML-Definition? Delphi-Variablennamen dürfen ja schließlich auch keine Sonderzeichen beinhalten (außer '_')
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: XML.AddChild(): Probleme mit Sonderzeichen

  Alt 27. Okt 2014, 14:31
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Peter Müller

Registriert seit: 15. Mär 2006
Ort: Stuttgart
22 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

AW: XML.AddChild(): Probleme mit Sonderzeichen

  Alt 27. Okt 2014, 23:42
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
"Der Erfolg besteht manchmal in der Kunst, das für sich zu behalten, was man nicht weiß." Sir Peter Ustinov
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: XML.AddChild(): Probleme mit Sonderzeichen

  Alt 28. Okt 2014, 00:41
Ich glaube du hast eine völlig falsche Vorstellung von XML-Dateien und deren Aufbau/Struktur.

Hier mal ein Beispiel von http://de.wikipedia.org/wiki/Extensible_Markup_Language
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>
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:33 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