Validade do XML via Delphi ????
O ClintDataSet muitas vezes é usado para gerar XML...
Existem algun teste que se possa fazer em um arquivo XML , para ver se a estrtutura desse Xml esta perfeita...
Por exemplo ao tentar abri na mão um XML que foi gerado pelo ClientDataSet tenho a seguinte mensagem : retornado pelo Internet Explorer
Na mão que me refiro é dando um duplo click no Arquivo
com testar isto via delphi ????
Tipo isto
Existem algun teste que se possa fazer em um arquivo XML , para ver se a estrtutura desse Xml esta perfeita...
Por exemplo ao tentar abri na mão um XML que foi gerado pelo ClientDataSet tenho a seguinte mensagem : retornado pelo Internet Explorer
Na mão que me refiro é dando um duplo click no Arquivo
A página XML não pode ser exibida
Não é possível exibir a entrada XML usando a folha de estilos XSL. Corrija o erro e clique no botão Atualizar ou tente novamente mais tarde.
Caractere inválido encontrado no texto. Erro ao processar o recurso ´file:///C:/MovProducao1/Dados/Producao.xml´. Linha 1, posição 1793
com testar isto via delphi ????
Tipo isto
If ArquivoXml Legal
clientDataSet.LoadForm := Este Arquivo
else
Erro No Arquivo .. Não abrir ???
Marco Salles
Curtidas 0
Respostas
Marco Salles
10/04/2007
Como validar os dados do ClintDataSet , para poder grava-lo e posteiormente abri-lo com segurança ??
GOSTEI 0
Marco Salles
10/04/2007
To estudando isto igual loko e ninguem abre uma linha de discussão
as vezes a gente sozinho acha que chega a algum resultado válido , porém não passa de uma fusão a frio
´Fusão a frio ´ esquece ia ser muitas delongas
Mas o que interressa por exemplo é o seguinte
Ao gravar no xml atraves de um campo via clientDataSet o seguinte :
[b:5e784b8097]Saia De[u:5e784b8097] Cós [/u:5e784b8097]Curta Estampada[/b:5e784b8097]
Na hora de abrir na mão o Xml obtenho o erro
Ao gravar no xml atraves de um campo via clientDataSet o seguinte :
[b:5e784b8097]Saia De[u:5e784b8097] Cos [/u:5e784b8097]Curta Estampada[/b:5e784b8097]
sem o acento... o Arquivo Xml abre normalmente... [b:5e784b8097]Vexi[/b:5e784b8097]
é isto mesmo ????
as vezes a gente sozinho acha que chega a algum resultado válido , porém não passa de uma fusão a frio
´Fusão a frio ´ esquece ia ser muitas delongas
Mas o que interressa por exemplo é o seguinte
Ao gravar no xml atraves de um campo via clientDataSet o seguinte :
[b:5e784b8097]Saia De[u:5e784b8097] Cós [/u:5e784b8097]Curta Estampada[/b:5e784b8097]
Na hora de abrir na mão o Xml obtenho o erro
Ao gravar no xml atraves de um campo via clientDataSet o seguinte :
[b:5e784b8097]Saia De[u:5e784b8097] Cos [/u:5e784b8097]Curta Estampada[/b:5e784b8097]
sem o acento... o Arquivo Xml abre normalmente... [b:5e784b8097]Vexi[/b:5e784b8097]
é isto mesmo ????
GOSTEI 0
Massuda
10/04/2007
Geralmente precisa incluir no início do arquivo qual a codificação que está sendo utilizada, por exemplo......indica que usa codificação ISO-8859-1 (a mais comum).
<?xml version="1.0" encoding="iso-8859-1"?> ...resto do seu arquivo...
GOSTEI 0
Marco Salles
10/04/2007
[b:a80b0f9767]citação de massuda[/b:a80b0f9767]
os arquivos xml gerados pelo meu Clintdataset estão assim inicilaizados:
[b:a80b0f9767]esses Arquivos xml gerados são todos MyBase , sen nehum banco a não ser SQL associado a ele[/b:a80b0f9767]
Eu ainda não testei , mas farei isto, > incluir manualmente esta sintasi
Obrigado....
Geralmente precisa incluir no início do arquivo qual a codificação que está sendo utilizada, por exemplo...Código:
<?xml version=´1.0´ encoding=´iso-8859-1´?>
...resto do seu arquivo...
...indica que usa codificação ISO-8859-1 (a mais comum).
os arquivos xml gerados pelo meu Clintdataset estão assim inicilaizados:
<?xml version=´1.0´ standalone=´yes´ ?>
- <DATAPACKET Version=´2.0´>
- <METADATA>
...resto do seu arquivo...
[b:a80b0f9767]esses Arquivos xml gerados são todos MyBase , sen nehum banco a não ser SQL associado a ele[/b:a80b0f9767]
Eu ainda não testei , mas farei isto, > incluir manualmente esta sintasi
encoding=´iso-8859-1´?
para ver se melhora o problema com relação aos acentos e caracteres especiasObrigado....
GOSTEI 0
Adriano Santos
10/04/2007
Nem esquenta com isso velho, basta usar a constante [b:864b55ca01]dfXMLUTF8[/b:864b55ca01] no segundo parâmetro do SaveToFile do ClientDataSet. Ai já era, fiz isso estes dias e funciona.
Exemplo:
Exemplo:
cdsArquivo.SaveToFile(ExtractFilePath(Application.ExeName) + ´Arquivo.xml´, dfXMLUTF8);
GOSTEI 0
Marco Salles
10/04/2007
Nem esquenta com isso velho, basta usar a constante dfXMLUTF8 no segundo parâmetro do SaveToFile do ClientDataSet. Ai já era, fiz isso estes dias e funciona.
Exemplo:
Citação:
cdsArquivo.SaveToFile(ExtractFilePath(Application.ExeName) + ´Arquivo.xml´, dfXMLUTF8);
[b:d5efe4865d]Acho que voce tem toda razão... [/b:d5efe4865d] :P Realmente o segundo parâmetro é a chave para ´Tudo´ ou quase ´Tudo´
Eu digo [b:d5efe4865d]quase tudo[/b:d5efe4865d] porque a primeira parte do tópico se refere a isto:
Existem algum teste que se possa fazer em um arquivo XML , para ver se a estrtutura desse Xml esta perfeita...
eu não sei se é a melhor solução , mas relendo algumas biografias , encontrei a principio o elemento [b:d5efe4865d]XMLDocument[/b:d5efe4865d]
mais ou menos assim:
[u:d5efe4865d]caminho do arquivo XML no meu diretório[/u:d5efe4865d]
try
XMLDocument1.Active:=false;
XMLDocument1.LoadFromFile(´[b:d5efe4865d]caminho[/b:d5efe4865d]´);
XMLDocument1.Active:=True;
erro:=False;
except
result:=erro;
end;
O problema é que os dados do Arquivo XML que será gerado estão no ClintDataSet . Eu teria que Salva-los em um Diretorio , para ter um Caminho... e de posse deste caminho efetuar um Teste com o XMLDocument1 para saber se o XML gerado é válido ou não
Eu gostaria que este teste fossem com os [b:d5efe4865d]dados[/b:d5efe4865d] do Clientdataset , sem passar por esta etapa de salvar.. Imagine ficar salvando vários Arquivos , e fazer a verificação nesses Arquivos para saber se são válidos ou não... Parece não ser uma boa idéia
Tudo isto parece estranho , mas vou tentar explicar melhor
Tenho varios ClientDataSet , todos eles desconectados
No inicio do Programa carrego eles com uma base de dados válida
Ao longo do programa tenho relacionamentos , crio indices dinamicos , gero exceçoes , finalizo bruscamente o Programa etc...
E na hora de fechar o Programa principal os dados desses ClintDataSet , tem que respeitar a formatação do XML , para que eu possa valida-los ou não na minha Base de dados , para que eu possa carrega-los ao abrir o programa futuramente..
:cry: :cry:
[b:d5efe4865d]Ai surge uma duvida [/b:d5efe4865d], será que há pssibilidades destes ClintDataSet , por algum risco que não é de meu inteiro conhecimento , ter em seus Dados , algo que possa criar um XML que não esteja no [b:d5efe4865d]Padrão Adequado[/b:d5efe4865d] :?: :?: :?:
Ai vem alguem que conhece mais do assunto do que eu , ou mesmo que possa ter um opinião a respeito e diz o seguinte:
"Não Marco Salles , esta possibilidade não existe , a Estrutura dos Dados doClietDataSet , sempre Serão válidos .. naõ corre o Risco por exemplo de se ter um Ruptura nestas Estrutura..."
:arrow: Se for esta a opinião , da integridade da estrutura dos Dados do ClintDataSet , eu confesso que estou [u:d5efe4865d][b:d5efe4865d]me procupando a Toa[/b:d5efe4865d][/u:d5efe4865d]...
:arrow: Se por outro lado , não se tiver certeza disso , acho que devo tentar fazer esta validaçao , porque ai eu so vou sobrepor a base de dados antiga por uma nova Base de dados válida
Esta é minha Duvida , Quero finalizar o programa sem correr o Risco de ter que dar manutenção no mesmo por eventuais erros deste tipo
[b:d5efe4865d]Obrigado massuda e Adriano[/b:d5efe4865d]
GOSTEI 0
Sremulador
10/04/2007
Amigo, tente..
Result.async := False;
Result.resolveExternals := False;
Result.validateOnParse := True;
Result.load(FileName);
end;
{ Validate }
procedure InternalValidateXMLDoc(const Doc: IDOMDocument; const SchemaDoc: IXMLDOMDocument2; const SchemaNS: WideString);
var
MsxmlDoc: IXMLDOMDocument2;
SchemaCache: IXMLDOMSchemaCollection;
Error: IXMLDOMParseError;
begin
MsxmlDoc := DOMToMSDom(Doc);
SchemaCache := CoXMLSchemaCache40.Create;
SchemaCache.add(SchemaNS, SchemaDoc);
MsxmlDoc.schemas := SchemaCache;
Error := MsxmlDoc.validate;
if Error.errorCode <> S_OK then
raise EValidateXMLError.Create(Error.errorCode, Error.reason);
end;
procedure ValidateXMLDoc(const Doc: IDOMDocument; const SchemaLocation, SchemaNS: WideString);
begin
InternalValidateXMLDoc(Doc, LoadMSDom(SchemaLocation), SchemaNS);
end;
procedure ValidateXMLDoc(const Doc: XMLIntf.IXMLDocument; const SchemaLocation, SchemaNS: WideString);
begin
InternalValidateXMLDoc(Doc.DOMDocument, LoadMSDom(SchemaLocation), SchemaNS);
end;
procedure ValidateXMLDoc(const Doc: IDOMDocument; const Schema: IXMLSchemaDoc);
begin
InternalValidateXMLDoc(Doc, DOMToMSDom(Schema.DOMDocument), ´´);
end;
procedure ValidateXMLDoc(const Doc: XMLIntf.IXMLDocument; const Schema: IXMLSchemaDoc);
begin
InternalValidateXMLDoc(Doc.DOMDocument, DOMToMSDom(Schema.DOMDocument), ´´);
end;
end.GOSTEI 0