Validar XML schema XSD
25/07/2014
0
Anderson Ferreira
Post mais votado
Mais Posts
25/07/2014
Wilson Brito
uses ComObj; function ValidarXmlComXsd(FileXml, FileXsd: string): String; var XML, XSDL: Variant; begin try XSDL := CreateOLEObject('MSXML2.XMLSchemaCache.4.0'); XSDL.validateOnLoad := True; XSDL.add('',FileXsd); XML := CreateOLEObject('MSXML2.DOMDocument.4.0'); XML.validateOnParse := True; XML.resolveExternals := True; XML.schemas := XSDL; XML.load(FileXml); Result := XML.parseError.reason; finally XSDL := varNull; XML := varNull; end; end;
25/07/2014
Anderson Ferreira
XML.validateOnParse := True;
25/07/2014
Anderson Ferreira
28/07/2014
Anderson Ferreira
Agradeço pela ajuda.
28/07/2014
Anderson Ferreira
Agradeço pela ajuda.
30/07/2014
Wilson Brito
Segue o código atualizado utilizando a versão 6 do MSXML. Você também pode utilizar a versão 5.
Aguardo retorno.
function ValidarXmlComXsd(FileXml, FileXsd: string): TStringList; var XML, XSDL: Variant; procedure LerXml(XmlNode: Variant; var Xml: Variant; var Result: TStringList); var i: integer; AttrNode: Variant; Erro: String; begin for i := 0 to XmlNode.childNodes.length -1 do begin AttrNode := XmlNode.childNodes.item[i]; if Trim(AnsiLowerCase(AttrNode.nodeTypeString)) = 'element' then begin Erro := Trim(Xml.validateNode(AttrNode).reason); If (Erro <> '') then begin if Result.Count = 0 then Result.Add(Erro) else if Result[Result.Count-1] <> Erro then Result.Add(Erro); end; LerXml(AttrNode, Xml, Result); end; end; end; begin try Result := TStringList.Create; Result.Clear; XSDL := CreateOLEObject('MSXML2.XMLSchemaCache.6.0'); XSDL.validateOnLoad := True; XSDL.add('',FileXsd); XML := CreateOLEObject('MSXML2.DOMDocument.6.0'); XML.validateOnParse := False; XML.resolveExternals := True; XML.schemas := XSDL; XML.load(FileXml); LerXml(xml, xml, Result); finally XSDL := varNull; XML := varNull; end; end;
Como utilizar:
procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines := ValidarXmlComXsd('c:\teste.xml', 'c:\teste.xsd'); end;
11/01/2017
Diego Freitas
Pra mim está retornando o erro:
file:///c:/NFe/nfe_v3.10.xsd#/schema
The " namespace provided differs from the schema´s 'http://www.portalfiscal.inf.br/nfe' targetNamespace
Alguém poderia me ajudar?
20/09/2017
Everaldo Informação
XSDL.add('http://www.portalfiscal.inf.br/nfe',FileXsd);
15/11/2021
Luciano Cremonese
Baixei o código acima e mesmo assim tive problemas na validação .
No meu caso o XSD disponibilizado pelo terceiro é dividido em 3 arquivos.
Com os os dados principais e que tem a importação dos outros dois com dados simples e complexos.
Eu sei que está importando os 2 arquivos pois ao gerar o erro me informa o padrão, porém o padrão é válido pelo dado, porém ele continua acusando erro.
Vejam abaixo
'86010480' viola a restrição pattern de '^[0-9]$'. Falha da análise do elemento '{http://XXXXXXXXXX.com.br/V1_00_00/schemas}cep' com valor '86010480'. '87470000' viola a restrição pattern de '^[0-9]$'. Falha da análise do elemento '{http://XXXXXXXXXX.com.br/V1_00_00/schemas}cep' com valor '87470000'. '04/10/1971' viola a restrição pattern de '^(?:(?:31(\\/|-|\\.)(?:0?[13578]|1[02]))\\1|(?:(?:29|30)(\\/|-|\\.)(?:0?[1,3-9]|1[0-2])\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d)$|^(?:29(\\/|-|\\.)0?2\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\d|2[0-8])(\\/|-|\\.)(?:(?:0?[1-9])|(?:1[0-2]))\\4(?:(?:1[6-9]|[2-9]\\d)?\\d)$'. Falha da análise do elemento '{http://XXXXXXXXXX.com.br/V1_00_00/schemas}dataNascimento' com valor '04/10/1971'. '99990000' viola a restrição pattern de '^[0-9]{6,18}$'. Falha da análise do elemento '{http://drswbj01.allianz.com.br/V1_00_00/schemas}telefone' com valor '99990000'. 'lalalala@emailvalido.com.br' viola a restrição pattern de '^([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4})$'. Falha da análise do elemento '{http://XXXXXXXXXX.com.br/V1_00_00/schemas}email' com valor 'sinistro@agriseguro.com.br'.
Clique aqui para fazer login e interagir na Comunidade :)