AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XML: #4 (usw.) abspeichern

Ein Thema von Die Muhkuh · begonnen am 25. Jan 2006 · letzter Beitrag vom 26. Jan 2006
Antwort Antwort
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#1

XML: #4 (usw.) abspeichern

  Alt 25. Jan 2006, 18:47
Hi,

ich möchte einen Wert abspeichern, der zuvor per Rijndael verschlüsselt wurde. Das Problem ist, dass in dem Wert nun Zeichen wie #4, #2 sind.

Mein XML-Dokument ist UTF8 kodiert. Folgende Variante versuche ich zum abspeichern:

Delphi-Quellcode:
with TCipher_Rijndael.Create(PW, nil) do
      begin
        tmp := EncodeString(Profil.Passwort);
        Free;
      end;

      tmp := UTF8Encode(tmp);

      SetNodeText(Node, 'password', tmp); // [1]
Bei [1] kommt eine Exception:

Code:
---------------------------
Project1
---------------------------
An invalid character was found in text content.
---------------------------
OK  
---------------------------
Tja, hat wer eine Lösung parat?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: XML: #4 (usw.) abspeichern

  Alt 25. Jan 2006, 22:10
Hallo Manuel,

wie kommst du darauf, dass dein Dokument UTF-8 kodiert sei - du hast es doch noch gar nicht gespeichert. Du hätttest vielleicht noch schreiben sollen, mit welchen Komponenten bzw. Schnittstellen du arbeitest. MSXML DOM arbeitet intern mit UTF-16. Nur beim Laden und Speichern wird das encoding aus der XML-Deklaration berücksichtigt.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: XML: #4 (usw.) abspeichern

  Alt 26. Jan 2006, 13:59
Hi marabu,

am Besten zeig ich dir mal meine ganze Routine:

Delphi-Quellcode:
procedure TProfile.Save;
  procedure DoSave(Doc: IXMLDocument);
  var
    I: Integer;
    Node: IXMLNode;
    Profil: TProfil;
    tmp: String;
  begin
    Node := Doc.DocumentElement.AddChild('count');
    SetNodeInt(Node, 'count', Count);

    for I := 0 to Count - 1 do
    begin
      Profil := Items[I];
      Node := Doc.DocumentElement.AddChild('profile' + IntToStr(I));
      SetNodeText(Node, 'user', Profil.Benutzername);
      
      with TCipher_Rijndael.Create(PW, nil) do
      begin
        tmp := EncodeString(Profil.Passwort);
        Free;
      end;

      tmp := UTF8Encode(tmp);

      SetNodeText(Node, 'password', tmp);
      SetNodeText(Node, 'domain', Profil.Domain);
      SetNodeText(Node, 'desc', Profil.Beschreibung);
    end;
  end;
var
  XMLDoc: IXMLDocument;
begin
  if (not (FileExists(FileName))) then
    TFileStream.Create(FileName, fmCreate).Free;

  XMLDoc := TXMLDocument.Create(nil);
  XMLDoc.XML.Add('<?xml version="1.0" encoding="UTF-8"?>');
  XMLDoc.XML.Add('<profile></profile>');
  XMLDoc.Active := true;
  DoSave(XMLDoc);
  XMLDoc.SaveToFile(FileName);
end;
Ich arbeite mit MSXML^^
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: XML: #4 (usw.) abspeichern

  Alt 26. Jan 2006, 14:27
Kein Ahnung wie SetNodeText() aussieht, aber die Zeile muss weg:

tmp := UTF8Encode(tmp); marabu
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#5

Re: XML: #4 (usw.) abspeichern

  Alt 26. Jan 2006, 14:31
Hi,

ich bin echt vergesslich zur Zeit

Delphi-Quellcode:
procedure SetNodeText(Node: IXMLNode; Name, Value: WideString);
var
  Temp: IXMLNode;
begin
  if Node <> nil then
  begin
    Temp := Node.ChildNodes.FindNode(Name);
    if Temp = nil then
      Temp := Node.AddChild(Name);
    if Temp <> nil then
      Temp.Text := Value;
  end;
end;
Wenn ich das mit UTF8Encode weglasse, klappt das leider trotzdem nicht. Der Fehler bleibt
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: XML: #4 (usw.) abspeichern

  Alt 26. Jan 2006, 17:58
Hallo Manuel,

du hast zwei Probleme, die sich zu allem Überfluß noch überlagern. Dein erstes Problem betrifft das encoding mit MSXML. Wenn da noch was unklar ist, frage ruhig nach. Dein zweites Problem hat mit dem cipher code zu tun. Die meisten Steuerzeichen (#0..#31) sind ungültige Zeichen. Dein cipher code produziert solche Zeichen. Du musst sie erst in gültige Zeichen übersetzen, damit keine exception geworfen wird.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:42 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