![]() |
Datenbank: MSSQL • Version: 2008 • Zugriff über: ADO
XML aus DBmemo überprüfen
ich speichere eine XML Datei in einem DBMEMO Feld. Die Anzeige in einem TDBMEMP bereitet keine Problem. (weil sehr einfach :-) )
Wenn ich den XML String an eine TWebbrowser Komponenten weiterleite bekomme ich eine AV wenn der String leer ist oder eine nicht gültige XML Datei enthält. Was ist der einfachste Weg den Inhalt aus dem DBMemo Feld auf seine Gültigkeit zu überprüfen ? |
AW: XML aus DBmemo überprüfen
Da ich gerade kein Blob mit XML zur Hand habe, habe ich es mit mit einem Filestream, statt eines Blobstreams, simuliert, vielleicht kannst Du damit was anfangen, weiterbasteln ...?
Delphi-Quellcode:
unit Unit5;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, StdCtrls, msxmldom, XMLDoc, ComCtrls; type TForm5 = class(TForm) x: TXMLDocument; Button1: TButton; Button2: TButton; TreeView1: TTreeView; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form5: TForm5; implementation {$R *.dfm} Function GetNodeText(n:IXMLNode;forceText:Boolean=true;NeedsSep:Boolean=true):String; begin if ForceText then begin try Result := n.Text except end; end else begin if n.IsTextElement then Result := n.Text else Result :=''; end; if NeedsSep and (Length(Result)>0) then Result := ' : ' + Result; end; Function Wrapped(const s:String):String; begin if Length(s)>0 then Result := ' ('+s+')' else Result := s; end; Function GetKommaIfNeeded(Const Exist:String):String; begin if length(Exist)>0 then Result := ', ' else Result := ''; end; Function Translated(Const instr:String;Translate:Boolean):String; begin Result := instr; end; Procedure ParseNodes(n:IXMLNode;tn:TTreeNode;Dest:TTreeView;Translate:Boolean); var i,j:Integer; an:TTreeNode; nodetext,att:String; begin if Not (Assigned(n) and Assigned(Dest)) then EXIT; For i := 0 to n.ChildNodes.Count - 1 do begin att :=''; for j := 0 to n.ChildNodes[i].AttributeNodes.Count - 1 do att := Att + GetKommaIfNeeded(Att)+ Translated(n.ChildNodes[i].AttributeNodes[j].LocalName,Translate) + '='+ n.ChildNodes[i].Attributes[n.ChildNodes[i].AttributeNodes[j].LocalName] ; if Length(n.ChildNodes[i].LocalName)>0 then begin nodetext := Translated(n.ChildNodes[i].LocalName,Translate); an := Dest.Items.AddChild(tn, nodetext + GetNodeText(n.ChildNodes[i],false,Length(nodetext)>0) + Wrapped(att)); ParseNodes(n.ChildNodes[i],an,dest,translate); end; end; end; procedure TForm5.Button2Click(Sender: TObject); var i:Integer; fs:TFileStream; begin // x.XML.LoadFromFile('C:\temp\test.xml'); fs := TFileStream.Create('C:\temp\test.xml',fmOpenRead); fs.Position := 0; try x.XML.LoadFromStream(fs); finally fs.Free; end; x.Active := true; ParseNodes(x.DocumentElement,nil,Treeview1,true); end; |
AW: XML aus DBmemo überprüfen
danke für den Code, hätte gedacht TXMLDokument hat schon eine eigene Funktion zum Überprüfen ob der XML Inhalt korrekt ist
|
AW: XML aus DBmemo überprüfen
Hallo,
Zitat:
Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 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