Você está na página 1de 5

Delphi Assistente de XML Binding Tutorial

Por: Andrea Raimondi


Resumo: O Delphi XML Binding Wizard requer algum conhecimento para ser usado. Eu
vou te mostrar
Introduo
O assistente de ligao XML permite que desenvolvedores usando arquivos XML evitar
toda a confuso relacionada com a gesto do n XML. Isso obtido por abstrair o
documento XML para um conjunto de interfaces que definem os valores finais, ao invs de
ns.
Como o arquivo tratado a nvel de ligao
Cada arquivo XML composto de um n raiz e os ns filhos diversos.
Isso significa que o cdigo do n raiz ser uma herana de interface de XmlDocument.
Embora isso possa parecer bvio para usurios experientes, os novatos tm que considerar
o que isso significa, porque isso implica vrias outras coisas.
Em primeiro lugar, isso significa que voc pode acessar o documento XML subjacente
original se voc tiver que executar algumas operaes, tais como uma seleo XPath.
Em segundo lugar, implica que - se voc realmente quer - voc pode reutilizar cdigo
baseando-se na interface IXMLDocument para a sua ligao actual. Isso til se voc tiver,
por exemplo, rotinas de vincular um documento XML para uma rvore (que bastante
comum).
Em terceiro lugar, isso significa que muito fcil gerar um tipo novo arquivo XML usando
a ligao e, em seguida, expor o XML gerado, basta utilizar a propriedade XML de tipo
TStrings.
ns filhos so uma outra considerao. O assistente pode distinguir entre ns de
composio e simples. Assim, se voc tiver um "itens" n com vrios "item" ns aninhados,
o assistente ser suficientemente inteligente para reconhecer o padro e acomodar o seu
cdigo gerado em conformidade.
ns filho pode derivar de qualquer IXMLNode ou herdadas interface de acordo com o tipo
de n, exceto IXMLDocument (que reservado, como mencionado acima, para o n raiz).
Voc vai notar que no h funo alguma para criar um n filho a menos que seja um n de
composio.
Isto o que o assistente toda sobre: voc define propriedades de interface e Delphi vai
cuidar da criao de ns.

Se, no entanto, h um n de composio, no h, ento vai ser um mtodo ADD permitindo


que voc defina os ns filhos. Este mtodo uma funo que retorna a interface mais
conveniente, como neste exemplo:
var MyChildNode: IMyChildNode;
comear
MyChildNode: = MyParentNode.Add;
/ / Definir as propriedades MyChildNode aqui, nos bastidores Delphi vai criar os ns.
efeito;
Quando usar o assistente
O assistente pode ser utilizado na maioria das ocasies. muito til especialmente para os
arquivos XML que podem ficar um pouco complicadas ou que no esto sob nosso
controle. A melhor caracterstica do assistente que, se um novo esquema compatvel com
XML ou arquivo enviado para voc, voc pode simplesmente voltar a gerar a fonte e
pronto.
Alternativas para o assistente
O principal, com o apoio, a alternativa para o assistente o uso de um conjunto de dados do
cliente.
Embora no seja exatamente um arquivo XML no seu prprio mrito (ou seja, o CDS
realmente um banco de dados), pode ser guardado para XML e tambm pode ser
transformado (usando o recurso de mapeamento XML) em um arquivo XML
personalizado.
Assim, voc pode prottipo de seu modelo de dados utilizando um conjunto de dados do
cliente, transform-lo em um arquivo XML, aliment-lo para o assistente, e voil.
O que para alimentar o assistente
O assistente de ligao pode ser alimentado com diferentes tipos de arquivo xml:
Os arquivos de dados (com extenso. xml)
Esquema de arquivos (com extenso. xsd)
arquivos XTR (muito raro, apenas no me importo)
Voc provavelmente vai alimentar o assistente com arquivos XML, menos provvel (mas
ainda muito possvel) com as do esquema.
A importao de arquivos de exemplo
Vamos ver um exemplo de arquivo XML.
<? Xml version = "1.0" encoding = "UTF-16"?>
<rootelement>
<childnodes attr1="1">
attr2="2"> <childnode

</ ChildNode>
attr2="2"> <childnode
</ ChildNode>
attr3="3"> <childnode
</ ChildNode>
</ ChildNodes>
<anotherchildnode>
com texto em que
</ Anotherchildnode>
</ Rootelement>
Inicie o assistente e import-lo.
Voc vai obter estas interfaces:
{} IXMLRootelementType
IXMLRootelementType = interface (IXMLNode)
['{875F00D6-2822-4DC7-B4F7-6178F9456EC8}']
Os assessores da propriedade {}
funo Get_Childnodes: IXMLChildnodesType;
funo Get_Anotherchildnode: WideString;
procedimento Set_Anotherchildnode (Valor: WideString);
{Mtodos e Propriedades}
ChildNodes propriedade: IXMLChildnodesType ler Get_Childnodes;
propriedade Anotherchildnode: WideString ler Get_Anotherchildnode
Set_Anotherchildnode escrever;
efeito;
{} IXMLChildnodesType
IXMLChildnodesType = interface (IXMLNodeCollection)
['{F26112C9-A8F2-4852-8EE2-86E50702015B}']
Os assessores da propriedade {}
Get_Attr1 funo: Integer;
funo Get_Childnode (Index: Integer): IXMLChildnodeType;
procedimento Set_Attr1 (Value: Integer);
{Mtodos e Propriedades}
Adicionar funo: IXMLChildnodeType;
Inserir funo (const Index: Integer): IXMLChildnodeType;
propriedade Attr1: Integer ler Get_Attr1 escrever Set_Attr1;
propriedade childNode [Index: Integer]: IXMLChildnodeType
leia Get_Childnode; padro;
efeito;
{} IXMLChildnodeType
IXMLChildnodeType = interface (IXMLNode)

['{E8DDAFCC-84BC-4067-808F-0D5DAF829436}']
Os assessores da propriedade {}
Get_Attr2 funo: Integer;
Get_Attr3 funo: Integer;
Set_Attr2 procedimento (Value: Integer);
Set_Attr3 procedimento (Value: Integer);
{Mtodos e Propriedades}
Attr2 propriedade: Integer ler Get_Attr2 escrever Set_Attr2;
Attr3 propriedade: Integer ler Get_Attr3 escrever Set_Attr3;
efeito;
Agora, se olharmos para este cdigo fonte, veremos que, por exemplo,
"AnotherChildNode" uma seqncia simples, enquanto ChildNodes tem o famoso.
Mtodo ADD.
Como voc usa essas interfaces? muito simples:
procedimento NewXMLFile (fora RootNode: IXMLRootelementType;
AnotherChildElement: String);
comear
RootNode: NewRootelement =;
RootNode.AnotherChildElement: AnotherChildElement =;
efeito;
procedimento AddChildElement (RootNode: IXMLRootElementType; attr2, attr3: String);
var childNode: IXMLChildNodeType;
comear
ChildNode: = RootNode.ChildNodes.Add;
ChildNode.Attr2: = attr2;
ChildNode.Attr3: = attr3;
efeito;
Vamos dar uma olhada em como o "NewRootElement" funo implementada:
funo Newrootelement: IXMLRootelementType;
comear
Resultado: = NewXMLDocument.GetDocBinding ('rootelement,
TXMLRootelementType) como IXMLRootelementType;
efeito;
O "NewXMLDocument" funo declarada no XMLDoc.pas e cria uma instncia
TXMLDocument interface.
Quando no usar o assistente XML vinculativo?
Como voc provavelmente observou, o XML ligao requer um parser DOM-orientado. Ou
seja, voc precisa estar carregando e mantendo todo o seu documento na memria.

Assim, voc no deve us-lo quando voc no precisar de todos o documento na memria.
Um exemplo disso pode ser, por exemplo, algum tipo de gerador de marca baseado.
Considere este arquivo XML:
<? Xml version = "1.0"?>
<build>
<taskdefs>
<taskdef name="DelphiCompiler" ExeFile="Dcc.exe"/>
</ Taskdefs>
<tasks>
<Task taskdef="DelphiCompiler" file="MyConsoleApp.dpr"/>
</ Tarefas>
</ Build>
Neste caso, voc simplesmente precisa analisar cada marca, voc no precisa de um DOM,
assim voc no precisa de um XML vinculado. Sim, voc ainda pode optar por usar uma,
mas isso no necessrio.
Outro caso quando voc precisa XPath, ento voc tem que usar a interface
IXMLDocument nativa. Mas isso para outro tutorial, realmente.
Concluses
Como voc pode ver, XML ligao bastante fcil de usar e poderoso. Tenho certeza que
voc vai gostar um pouco, na verdade, quando voc vai us-lo.
Agora voc sabe o bsico para us-lo eficientemente, basta ir e ligar os arquivos!

Você também pode gostar