2011-06-13 10 views
15

Pregunta: ¿Cómo puedo verificar la sintaxis de mi XML en los navegadores modernos (cualquier cosa menos IE)?Comprobar errores XML mediante JavaScript

He visto a page on W3Schools que incluye un corrector de sintaxis XML. No sé cómo funciona, pero me gustaría saber cómo puedo lograr el mismo comportamiento.

Ya he realizado muchas búsquedas al respecto (sin éxito), y he intentado utilizar DOM Parser para comprobar si mi XML está "bien formado" (también sin éxito).

 
var xml = 'Caleb'; 
var parser = new DOMParser(); 
var doc = parser.parseFromString(xml, 'text/xml'); 

espero que el analizador me dicen que tengo un error de sintaxis XML (es decir, una etiqueta sin cerrar nombre). Sin embargo, siempre devuelve un objeto XML DOM, como si no hubiera ningún error.

En resumen, me gustaría saber cómo puedo verificar automáticamente la sintaxis de un documento XML utilizando JavaScript.

P.S. ¿Hay alguna manera de que pueda validar un documento XML en contra de una DTD (usando JS, y no IE)?

Respuesta

24

Editar: Aquí está un ejemplo más concisa, desde MDN:

var sMyString = "<a id=\"a\"><b id=\"b\">hey!<\/b><\/a>"; 
var oParser = new DOMParser(); 
var oDOM = oParser.parseFromString(sMyString, "text/xml"); 
// print the name of the root element or error message 
dump(oDOM.documentElement.nodeName == "parsererror" ? "error while parsing" : oDOM.documentElement.nodeName); 
+0

Impresionante, eso es justo lo que necesitaba. ¡Gracias! – caleb531

+0

donde se define la función'checkErrorXML '? – Sudarshan

+3

@DerrickRice Las muestras de código de MDN tienen licencia de MIT (si se agregaron antes de 2010) o dominio público. Entonces en este caso no es un problema. [ref] (https://developer.mozilla.org/en-US/docs/Project:MDN/About) – Jeremy

1

NoBugs respuesta anterior no funcionó con un cromo actual para mí. Sugiero:

var sMyString = "<a id=\"a\"><b id=\"b\">hey!<\/b><\/a>"; 
var oParser = new DOMParser(); 
var oDOM = oParser.parseFromString(sMyString, "text/xml"); 
dump(oDOM.getElementsByTagName('parsererror').length ? 
    (new XMLSerializer()).serializeToString(oDOM) : "all good"  
); 
Cuestiones relacionadas