使用JavaScript检查XML错误

cal*_*531 18 javascript xml dom

问题:如何在现代浏览器(除了IE之外的任何东西)中对我的XML进行语法检查?

在W3Schools上看过一个包含XML语法检查器的页面.我不知道它是如何工作的,但我想知道如何实现同样的行为.

我已经在这个问题上进行了很多搜索(没有成功),我尝试使用DOM Parser来检查我的XML是否"格式正确"(也没有成功).

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

我希望解析器告诉我我有一个XML语法错误(即一个未关闭的名称标签).但是,它总是返回一个XML DOM对象,就好像根本没有错误一样.

总而言之,我想知道如何使用JavaScript自动检查XML文档的语法.

PS有没有办法可以针对DTD验证XML文档(使用JS,而不是IE)?

NoB*_*ugs 28

编辑:这是一个更简洁的例子,来自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);
Run Code Online (Sandbox Code Playgroud)

  • @DerrickRice来自MDN的代码样本要么是MIT许可(如果在2010之前添加),要么是公共域.所以在这种情况下,这不是问题.[参考文献](https://developer.mozilla.org/en-US/docs/Project:MDN/About) (3认同)
  • MDN 是不正确的,这个答案也是如此。dom.getElementsByTagName('parsererror') 会更好。(请参阅本页上的答案。) &lt;parsererror&gt; 将出现在文档中的某个位置,但不一定出现在 dom.documentElement 处。 (3认同)

Hen*_*ach 7

上面的 NoBugs 答案对我来说不适用于当前的 chrome。我建议:

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"    
);
Run Code Online (Sandbox Code Playgroud)