Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi TXMLDocument: Typ (Null) in Typ (String) konvertieren (https://www.delphipraxis.net/118993-txmldocument-typ-null-typ-string-konvertieren.html)

Angel4585 19. Aug 2008 07:39


TXMLDocument: Typ (Null) in Typ (String) konvertieren
 
Hallo,

ich bekomme folgende Fehlermeldung wenn ich versuche einen String einzulesen.
Bei normalen Strings(also mit Inhalt) funktioniert dies, jedoch bei leeren Strings nicht.

---------------------------
XMLTestProgramm
---------------------------
Variante des Typs (Null) konnte nicht in Typ (String) konvertiert werden.
---------------------------
OK
---------------------------

Normal sieht es so aus:

XML-Code:
  <User>Benutzer</User>
  <Password>Password</Password>
Bei leeren Strings so:
XML-Code:
  <User />
  <Password>Password</Password>
Und wenn versucht wird den User einzulesen kommt eben diese Fehlermeldung.
Wie mache ich jetzt, dass beim Speichern bei einem leeren String <User></User> anstatt <User /> eingetragen wird?

:angel:

mkinzler 19. Aug 2008 07:47

Re: TXMLDocument: Typ (Null) in Typ (String) konvertieren
 
Wie liest du das ein über ein Art XML-DataSet? Dann muss du vorher auf .isNull prüfen

Angel4585 19. Aug 2008 07:51

Re: TXMLDocument: Typ (Null) in Typ (String) konvertieren
 
Naja mit der TXMLDocument Komponente :gruebel:
Und ein IsNull kann ich da nicht finden :oops:

BTW: Wir brauchen noch diesen Smilie in der DP: Lupe

mkinzler 19. Aug 2008 08:02

Re: TXMLDocument: Typ (Null) in Typ (String) konvertieren
 
Wie liest du aus?

Deep-Sea 19. Aug 2008 08:04

Re: TXMLDocument: Typ (Null) in Typ (String) konvertieren
 
Zitat:

Zitat von Angel4585
Wie mache ich jetzt, dass beim Speichern bei einem leeren String <User></User> anstatt <User /> eingetragen wird?

Am Rande: <User></User> und <User /> stellen genau das gleiche dar. <User /> ist nur eine kürzere Schreibweise für ein Leeres Element. :-D

Angel4585 19. Aug 2008 08:09

Re: TXMLDocument: Typ (Null) in Typ (String) konvertieren
 
Delphi-Quellcode:
procedure TMyList.LoadFromFile(AFile: string);
var
  i : integer;
  lxml : TXMLDocument;
  cn : IXMLNode;
  cnTemp : IXMLNode;

begin
if(not FileExists(AFile))then exit;
Self.Clear;
lxml := TXMLDocument.Create(Application);
with lxml do
  try
    Options:=Options + [doNodeAutoIndent];
    LoadFromFile(AFile);
    cn:=DocumentElement;
    for i :=0 to Pred(cn.ChildNodes.Count)do
      begin
      if(cn.ChildNodes.Nodes[i].NodeName = 'MyItem')then
        begin
        with TMyItem.Create(self) do
          begin
          FUser:=    cn.ChildNodes[i].ChildValues['User'];//Hier tritt der Fehler auf
.
.
Und so schreib ich:

Delphi-Quellcode:
procedure TMyList.SaveToFile(AFile: string);
var
  i : integer;
  w : IXMLNode;

begin
with TXMLDocument.Create(nil) do
  try
    Active:=True;
    Options:=[doNodeAutoIndent];
    ParseOptions:=[poPreserveWhiteSpace];
    with AddChild('MyList') do
      begin
      for i :=0 to Pred(Self.Count)do
        begin
        with AddChild('MyItem') do
          begin
          AddChild('User').Text:=MyItems[i].FUser;
          AddChild('Password').Text:=MyItems[i].FPassword;
.
.

Hui der rote Kasten geht mal :lol:


Zitat:

Zitat von Deep-Sea
Zitat:

Zitat von Angel4585
Wie mache ich jetzt, dass beim Speichern bei einem leeren String <User>&lt;/User&gt; anstatt &lt;User /&gt; eingetragen wird?

Am Rande: &lt;User&gt;&lt;/User&gt; und &lt;User /&gt; stellen genau das gleiche dar. &lt;User /&gt; ist nur eine kürzere Schreibweise für ein Leeres Element. :-D

Und was wenn ein String einfach ' ' sein soll? Also ein Leerzeichen? Dann macht er auch dieses <User />

Edit: Gott hats das Zitat verhunzt :shock:

mkinzler 19. Aug 2008 08:13

Re: TXMLDocument: Typ (Null) in Typ (String) konvertieren
 
Was passiert wenn du
Delphi-Quellcode:
cn.ChildNodes[i].Text
nimmst?

Angel4585 19. Aug 2008 08:16

Re: TXMLDocument: Typ (Null) in Typ (String) konvertieren
 
Zitat:

Zitat von mkinzler
Was passiert wenn du
Delphi-Quellcode:
cn.ChildNodes[i].Text
nimmst?

Sehr schön das klappt :thumb: :dp:

Deep-Sea 19. Aug 2008 08:19

Re: TXMLDocument: Typ (Null) in Typ (String) konvertieren
 
Zitat:

Zitat von Angel4585
Und was wenn ein String einfach ' ' sein soll? Also ein Leerzeichen? Dann macht er auch dieses <User />

Dann sollte daraus nicht <User /> werden. Das liegt dann aber bei der Komponente die du nutzt :wink:


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