viernes, 13 de febrero de 2015
Validar XML con XSD en HARBOUR
Harbour, parece, que no aporta alguna librería de validación de XML a través de un XSD.
Si usamos Windows, vamos a usar las librerías de Microsoft que nos aporta.
¿ Para que sirve validar un XML ? Para evitarnos dolores de cabeza.
Si nuestra XSD determina que el tipo de dato un atributo es un valor del tipo int, si
nos lleva un tipo String, con la validación, saltará la alarma antes de continuar mirando
donde esta el error.
Esta función recibe el fichero XML y el XSD que tiene que usar y devuelve true si se valida.
if Validate_XSD( "test.xml", "test.xsd" )
... SIGO con XML
endif
//-----------------------------------------------------------------------
// Source Code
//-----------------------------------------------------------------------
function Validate_XSD( cFileXML, cFileXSD )
Local oXmlDoc, oSchema, oSchemaCache, oParseError
Local lOk := .f.
oXmlDoc := CreateObject("Msxml2.DOMDocument.6.0")
oXmlDoc:async := .F.
oXmlDoc:validateOnParse := .F.
oXmlDoc:resolveExternals = .F.
oXmlDoc:load( cFileXML )
//oXmlDoc:loadXML( cString_XML ) // Usar variable con contenido XML
oSchema := CreateObject("Msxml2.DOMDocument.6.0")
oSchema:async := .F.
oSchema:load( cFileXSD )
//oSchema:loadXML( cString_XSD )
oSchemaCache := CreateObject("Msxml2.XMLSchemaCache.6.0")
oSchemaCache:add( "", oSchema )
oXmlDoc:schemas := oSchemaCache
oParseError := oXmlDoc:validate()
if !empty( oParseError:errorCode )
Alert( Cstr( oParseError:errorCode ) + "#"+ cStr( oParseError:reason ) )
else
lOk := .t.
endif
return lOk
Aqui dejo un fichero XML y XSD de prueba. Cambiar la cadena texto por un entero para que comprobeis que esta haciendolo ok.
//-----------------------------------------------------------------------
// test.xml
//-----------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<testfile xsi:noNamespaceSchemaLocation="test.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<companyName>texto</companyName>
</testfile>
//-----------------------------------------------------------------------
// test.xsd
//-----------------------------------------------------------------------
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="testfile">
<xs:complexType>
<xs:sequence>
<xs:element name="companyName" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Suscribirse a:
Enviar comentarios (Atom)
Android y Git. Disponer del hash automáticamente.
Una de las cosas a las que estoy acostumbrado, es tener siempre en mi código, el hash/tag/versión del control de versiones que estoy usan...
-
Voy a publicar una serie de post sobre las funciones de threads que espero os sirva para comprender como podeis sacar provecho a ...
-
Después de más de 2 años, sacrificando fin de semanas y tiempo libre, he podido pasar a una versión totalmente funcional. El Sofware es ca...
-
Os muestro un pequeño video de las posibilidades de Harbour funcioanando como un servidor Web. Dentro de /contrib/httpd, tenéis un serv...
Excelente muchas gracias por compartir ... me sirve de mucho para el tema de los XML de Facturación Electrónica.
ResponderEliminarSaludos.
Atte.
Lucho Montero.
LIMA - PERU.