Indudablemente hay muchas formas de trabajar XML con Delphi. Una que puede resultar muy práctica es el uso de OmniXML, una biblioteca bastante madura y disponible bajo la licencia MPL.
Veremos pues, a manera de ejemplo, como con una sola línea de código podemos guardar la configuración en un archivo XML.
La línea:
TOmniXMLWriter.SaveToFile(Conf, ConfigFileName, pfNodes, ofIndent);
El resultado:
<data propformat="node"> <tappconfig> <autoupdate>1</autoupdate> <autologin>0</autologin> <defaultusername>test</defaultusername> <defaultpassword>BadChoice</defaultpassword> <mainwindow> <displaywallpaper>1</displaywallpaper> <wallpaperfilename>c:\users\Public\Pictures\Sample Pictures\Forest.jpg</wallpaperfilename> </mainwindow> </tappconfig> </data>
Nada mal para una sola línea de código, ¿no?
Bien, el requisito detrás de esta “magia” es que tengamos una clase, derivada de TPersistent donde mantenemos la configuración. El método SaveToFile de TOmniXMLWriter guardará en el XML todas aquellas propiedades publicadas (published). Una ventaja es que este método se encarga también de aquellas propiedades objeto que también deriven de TPersistent.
En el caso de ejemplo, la clase de configuración se ve así:
type TMainWindowConfig = class(TPersistent) private FDisplayWallPaper: Boolean; FWallPaperFileName: string; public procedure Assign(Source: TPersistent); override; published property DisplayWallPaper: Boolean read FDisplayWallPaper write FDisplayWallPaper; property WallPaperFileName: string read FWallPaperFileName write FWallPaperFileName; end; TAppConfig = class(TPersistent) private FAutoUpdate: Boolean; FMainWindowConfig: TMainWindowConfig; FAutoLogin: Boolean; FDefaultPassword: string; FDefaultUserName: string; procedure SetMainWindowConfig(const Value: TMainWindowConfig); public constructor Create; published property AutoUpdate: Boolean read FAutoUpdate write FAutoUpdate; property AutoLogin: Boolean read FAutoLogin write FAutoLogin; property DefaultUserName: string read FDefaultUserName write FDefaultUserName; property DefaultPassword: string read FDefaultPassword write FDefaultPassword; property MainWindow: TMainWindowConfig read FMainWindowConfig write SetMainWindowConfig; end;
Nada mal, eh…
Si te interesa, dejo a tu disposición el Código completo (pdf)
¿por qué el código en PDF?
por favor, se benevol@ y no me maldigas por el formato de archivo, lo elegí porque puedo alojarlo aquí mismo y así no me arriesgo a que luego no esté disponible.
Te recuerdo que en este blog, los comentarios y críticas son siempre bienvenidos 😉
Vaya, que bien, ya regresaste al mundo virtual, que bien amigo, un gusto leerte de nuevo.
Saludos
Gracias… es un gusto para mi estar de vuelta… jeje. 😀
hola jachguate
no tendras mas demos de como usar omnixml.
al xml yo no le hayo,, y me intersa usarlo
gracias.
Ejemplos hay muchos por la red… quizás yo publique algunos mas en el futuro, pero si te sirvan depende de lo que querras lograr y de tu disposición a aprender ensuciándote un poco las manos con el código… 🙂
habra muchos pero yo no los encuentro
si los hubiese encontrado, no hubiesea solicitado
ejemplos