2012-06-15 105 views
5

Quiero validar XML para el siguiente utilizando node.js. ¿Alguien puede sugerir un buen módulo node.js que funcione tanto en windows/linux?Validar la sintaxis/estructura XML con node.js

  • Validar XML Sintaxis
  • Estructura Validar XML (esquema)

Gracias de antemano.

Respuesta

0

ACTUALIZACIÓN respuesta

de Ver conrad10781. Esta respuesta está desactualizada ya que la página wiki original a la que me he vinculado ha sido archivada, aunque destacó qué módulos permitieron validar la sintaxis y el esquema.

INFO ANTICUADA

Hay una plétora de analizadores XML disponible a través de npm.

Las implementaciones nativas (como node-expat) requieren la construcción de una extensión C++ para romper el requisito de que el módulo funcione tanto en Windows como en Linux, pero debido a la velocidad que proporcionan debe probarlas de todos modos , especialmente si está tratando con grandes archivos XML.

xmldom debería ser capaz de proporcionar un análisis XML muy simple de las cadenas. A continuación, puede crear una función para simplemente devolver verdadero/falso dependiendo de la salida del análisis (compruebe cómo DOMParser devuelve errores).

+0

El primer enlace a XML Parser Modules ahora está roto. – spoulson

+0

@spoulson gracias por traer eso a mi atención. Se resolvió señalar directamente al sitio web de npm. –

8

Sé que esta es una publicación anterior, pero me encontré con ella, y desafortunadamente, la respuesta de Ankit no fue de mucha ayuda para mí. En el mejor de los casos se centró en si la entrada es una sintaxis XML válida, no si está adherida a un esquema, que era parte del OP.

He encontrado libxmljs para ser la mejor solución para lo que estás buscando. Puede analizar, validar la cadena básica, así como una estructura detallada.

Un ejemplo de comprobación de una sintaxis XML sería con algo como:

program.isValidSyntaxStructure = function (text) { 
    try { 
     libxmljs.parseXml(text); 
    } catch (e) { 
     return false; 
    } 

    return true; 
}; 

Un ejemplo de comprobación de una estructura específica/esquema sería con algo como:

var xsd = '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="comment" type="xs:string"/></xs:schema>'; 
var xml_valid = '<?xml version="1.0"?><comment>A comment</comment>'; 
var xml_invalid = '<?xml version="1.0"?><commentt>A comment</commentt>'; 

var xsdDoc = libxml.parseXml(xsd); 
var xmlDocValid = libxml.parseXml(xml_valid); 
var xmlDocInvalid = libxml.parseXml(xml_invalid); 

assert.equal(xmlDocValid.validate(xsdDoc), true); 
assert.equal(xmlDocInvalid.validate(xsdDoc), false);