Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Nodes mit Leerzeichen und Sonderzeichen auslesen (https://www.delphipraxis.net/31813-nodes-mit-leerzeichen-und-sonderzeichen-auslesen.html)

Chillaa 14. Okt 2004 12:26


Nodes mit Leerzeichen und Sonderzeichen auslesen
 
XML-Code:
<?xml version="1.0"?>
<AutoData>
    <AutoList Count=2>
      <Auto Index=0>
        <AutoFarbe>blau</AutoFarbe>
        <AutoNr>11111</AutoNr>
        (...)
      </Auto>
      <Auto Index=1>
        <AutoFarbe>grün</AutoFarbe>
        <AutoNr>22222</AutoNr>
        (...)
      </Auto>
    </AutoList>
</AutoData>
Wie kann ich jetzt auf die AutoFarbe zugreifen? Irgendwie weiss ich nicht, wie ich mit den Leerzeichen und SOnderzeichen umzugehen habe.

Vielen Dank schonmal für eine Antwort!

Grüsse

Stef

Bernhard Geyer 14. Okt 2004 12:31

Re: Nodes mit Leerzeichen und Sonderzeichen auslesen
 
Es fehlt die Angabe der Codierung im Header.
z.B.
XML-Code:
<?xml version="1.0" encoding="UTF-8" ?> für UTF-8
Wenn diese angegeben ist sollte der Parser/DOM alles transparent für dich erledigen.

Chillaa 14. Okt 2004 12:52

Re: Nodes mit Leerzeichen und Sonderzeichen auslesen
 
Erstmal herzlichen Dank für die schnelle Hilfe!

Die XML Datei lade ich aus dem Netz und dort ist leider nichts angegeben was das encoding betrifft.

Mit UTF-8 hat es nicht geklappt, mit ISO-8859-1 gings dann, allerdings nur, wenn ich die Leerz- und die Sonderzeichen bei den Nodes gelöscht habe.

Sprich:

XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<AutoData>
    <AutoListCount>
      <AutoIndex>
        <AutoFarbe>blau</AutoFarbe>
        <AutoNr>11111</AutoNr>
        (...)
      </Auto>
      <AutoIndex>
        <AutoFarbe>grün</AutoFarbe>
        <AutoNr>22222</AutoNr>
        (...)
      </Auto>
    </AutoList>
</AutoData>
Doch eigentlich möchte ich die XML nicht verändern müssen.

Vielen Dank nochmals.

Grüsse

Stef

CalganX 14. Okt 2004 12:57

Re: Nodes mit Leerzeichen und Sonderzeichen auslesen
 
Hi,
das ist eigentlich keine Sache des Encodings. :?
Versuche mal die Werte der Attribute mit " zum umsetzen (komisches Wort):
Code:
<auto index=[color=#ff0000]"[/color]1[color=#ff0000]"[/color]>

Chillaa 14. Okt 2004 13:10

Re: Nodes mit Leerzeichen und Sonderzeichen auslesen
 
Ich bin ja echt überwältigt wie schnell hier Antworten kommen!

So wie ich das sehe, hat das Problem mit den Sonderzeichen in den Werten mit dem Encoding zu tun (also bei meinem Bsp, das "Grün").

Wenn ich das in

Delphi-Quellcode:
<auto index="1">
ändere, muss ich dann via

Delphi-Quellcode:
    AutoList:=XMLDoc.DocumentElement.SelectNodes(AutoListCount/Auto');
oder via
Delphi-Quellcode:
    AutoList:=XMLDoc.DocumentElement.SelectNodes(AutoListCount/Auto Index');
oder via
Delphi-Quellcode:
    AutoList:=XMLDoc.DocumentElement.SelectNodes(AutoListCount/Auto Index="0"');
darauf zugreifen? (Letzteres wohl kaum, da er stonst ja nicht zum nächsten Auto springen würde.

Mit
Delphi-Quellcode:
<auto index="1">
hats auch nicht geklappt... :(

Chillaa 14. Okt 2004 13:28

Re: Nodes mit Leerzeichen und Sonderzeichen auslesen
 
Ich korrigiere mich grad selber ;) Das mit der Auswahl hat geklappt, jetzt konnte ich das XML-File:

XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<AutoData>
    <AutoList Count="2">
      <Auto Index="0">
        <AutoFarbe>blau</AutoFarbe>
        <AutoNr>11111</AutoNr>
        <AutoMarke>Fiat</AutoMarke>
      </Auto>
      <Auto Index="1">
        <AutoFarbe>grün</AutoFarbe>
        <AutoNr>22222</AutoNr>
        <AutoMarke>Seat</AutoMarke>
      </Auto>
    </AutoList>
</AutoData>
problemlos einlesen.

Nun lade ich die Datei aus dem Internet und dort steht in der ersten Zeile bloss:

XML-Code:
<?xml version="1.0"?>
Kann ich irgendwie diesem File den Wert encoding="ISO-8859-1" zuweisen?

Vielen Dank schonmal :)

Grüsse

Stef

Chillaa 15. Okt 2004 13:23

Re: Nodes mit Leerzeichen und Sonderzeichen auslesen
 
Hm, scheint als wäre es ein verflixter Fall.

Ich habe in der XML Datei ein Zeichen "ę".
Wenn ich ein Iso Encoding wähle (ISO-8559-1 bis ISO-8559-15) geht das mit dem "XML-Datei einlesen" ohne Fehlermeldung. Wenn ich allerdings einen Nodewert mit dem Sonderzeichen "ę" einer Variable zuweise, schmiert das Programm ab.

Kann mir da jemand helfen? Wie kann ich auf einen ę-Namen zugreifen? Mit welchem encoding?

Danke schonmal im Voruas!

Grüsse

Stef

Chillaa 18. Okt 2004 10:09

Re: Nodes mit Leerzeichen und Sonderzeichen auslesen
 
Zitat:

Zitat von Chillaa
Hm, scheint als wäre es ein verflixter Fall.

Ich habe in der XML Datei ein Zeichen "ę".
Wenn ich ein Iso Encoding wähle (ISO-8559-1 bis ISO-8559-15) geht das mit dem "XML-Datei einlesen" ohne Fehlermeldung. Wenn ich allerdings einen Nodewert mit dem Sonderzeichen "ę" einer Variable zuweise, schmiert das Programm ab.

Kann mir da jemand helfen? Wie kann ich auf einen ę-Namen zugreifen? Mit welchem encoding?

Danke schonmal im Voruas!

Grüsse

Stef

Kann mir da echt niemand weiterhelfen?
:|

fiasko 18. Okt 2004 10:31

Re: Nodes mit Leerzeichen und Sonderzeichen auslesen
 
Zitat:

Zitat von Chillaa
Delphi-Quellcode:
<auto index="1">
ändere, muss ich dann via

[...]

darauf zugreifen?

Also Knotennamen enthalten grundsätzlich keine Leerzeichen. Das Index ist ein Attribut. Du kannst jetzt 3 verschiedene XPath-Pfade nehmen:

Code:
/AutoData/AutoList/Auto                # eine Menge aller Autos (also 2 Elemente in diesem Fall)

/AutoData/AutoList/Auto[@index='0']    # eine (hier einelementige) Menge mit den Auto welches das Attribut index mit dem Wert 0 besitzen

/AutoData/AutoList/Auto/@index         # eine Menge von Werten der Index Attribute
--

Für dein Sonderzeichenproblem: was ist denn die genaue Fehlermeldung? Vielleicht noch ein Code-Schnipsel von wo er abschmiert würde helfen...

Chillaa 19. Okt 2004 11:12

Re: Nodes mit Leerzeichen und Sonderzeichen auslesen
 
Zitat:

Zitat von fiasko
Für dein Sonderzeichenproblem: was ist denn die genaue Fehlermeldung? Vielleicht noch ein Code-Schnipsel von wo er abschmiert würde helfen...

Vielen herzlichen Dank für deine Antwort, hat mir echt viel gebracht. Jetzt dürfte sich das Problem für mcih geklärt haben.

Einzig das Problem mit dem Sonderzeichen besteht noch :(

Details dazu:

Ich habe aus dem Internet eine XML-Datei mit dem Namen "Ziętek". Bei der XML-Head-Zeile steht bloss
XML-Code:
<?xml version="1.0"?>
also nix von "encoding".
Ich lese diese Datei ein (parse) und gebe sie via TListView aus. Wenn ich nichts bei encoding reinschreibe, bekomme ich eine Fehlermeldung nach dem Parsen. Im Programm an dieser Stelle:
Delphi-Quellcode:
   if XmlDoc.parseError.errorCode <> 0 then begin
    MessageDlg('Die XML Datei ist nicht korrekt!' + #13#10
              +'Das Programm wird nun beenden!', mtError, [MbOk], 0);
    Application.Terminate;
  end;
Wenn ich bei der Head-Zeile der XML-Datei z.B.
XML-Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>
einsetze, dann gibts keine Fehlermeldung und die Datei wird richtig geparst und im ListView aufgeführt. Allerdings wird der Name "Ziętek" in "Zietek" umgewandelt.
Ich wollte, dass bei Doppelklick auf den Namen ein Fenster geöffnet wird (listview.selected.Caption, wobei Caption := Name). Dann schmiert das Programm allerdings ab, weil ja in der XML-Datei kein "Zietek" sondern nur ein "Ziętek" existiert.

Nun meine Fragen:

1. Was muss ich bei Encoding schreiben, damit das ę richtig übernommen wird?

2. Wenn ich die XML-Datei direkt aus dem Internet parsen will, gibts ja die Fehlermeldung, weil kein encoding-typ definiert ist. Kann ich diesen Typ irgendwie via Delphi definieren?

Hoffe, dass mein Problem mit den Sonderzeichen nun verständlicher wurde.

Vielen Dank für eine Antwort :)

Grüsse

Stef

Chillaa 21. Okt 2004 02:15

Re: Nodes mit Leerzeichen und Sonderzeichen auslesen
 
Noch immer unklar formuliert oder weiss niemand eine Antwort?

Grüsse

Stef

himitsu 21. Okt 2004 07:37

Re: Nodes mit Leerzeichen und Sonderzeichen auslesen
 
Also (wenn ich's jetzt so im Halbschlaf richtig verstanden hab...) es ist so eine Art von escape()/unescape()/encodeURI()decodeURI(), über welche die Daten codiert werden - vor allem die <, >, " und % müssen ja weg.

Die entsprechenden Zeichen werden in ein %, gefollgt von der 2-stelligen Hexadezimaldarstellung umgewandelt.

" " = %20
- = %2D
? = %3F
> = %3E
< = %3C
ä = %E4
ö = %F6
...

[add]
siehe Javascript-Funktion in Delphi?
[/add]


Hab zwar kaum Ahnung von XML, aber mein Trillian erstezt in seinen XML, alles, (vermutlich) was kein Buchstabe, oder keine Zahl ist ... auch die Leerzeichen werden geändert.
In der XML von der DP-ShoutBox ist das nicht so extrem, dort sinc die z.B. Leerzeichen auch wirklich noch leerzeichen.

Von den Werten her ist ja egall, ob nun "zuviel" codiert wird, die Datei wird dann halt nur größer (da ja aus einem Zeichen drei werden)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 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