使用 JavaScript 检查 XML 错误
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6334119/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Check for XML errors using JavaScript
提问by caleb531
Question:How do I syntax-check my XML in modern browsers (anything but IE)?
问题:如何在现代浏览器(IE 除外)中检查我的 XML 的语法?
I've seen a page on W3Schoolswhich includes an XML syntax-checker. I don't know how it works, but I'd like to know how I may achieve the same behavior.
我在 W3Schools 上看到了一个页面,其中包含一个 XML 语法检查器。我不知道它是如何工作的,但我想知道如何实现相同的行为。
I've already performed many searches on the matter (with no success), and I've tried using the DOM Parser to check if my XML is "well-formed" (also with no success).
我已经对此事进行了许多搜索(没有成功),并且我尝试使用 DOM 解析器来检查我的 XML 是否“格式良好”(也没有成功)。
var xml = 'Caleb'; var parser = new DOMParser(); var doc = parser.parseFromString(xml, 'text/xml');
I expect the parser to tell me I have an XML syntax error (i.e. an unclosed nametag). However, it always returns an XML DOM object, as if there were no errors at all.
我希望解析器告诉我我有一个 XML 语法错误(即未关闭的名称标签)。然而,它总是返回一个 XML DOM 对象,就好像根本没有错误一样。
To summarize, I would like to know how I can automatically check the syntax of an XML document using JavaScript.
总而言之,我想知道如何使用 JavaScript 自动检查 XML 文档的语法。
P.S. Is there any way I can validate an XML document against a DTD (using JS, and not IE)?
PS 有什么方法可以根据 DTD 验证 XML 文档(使用 JS,而不是 IE)?
回答by NoBugs
Edit: Here is a more concise example, from MDN:
编辑:这是一个更简洁的例子,来自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);
回答by Henryk Gerlach
NoBugs answer above did not work with a current chrome for me. I suggest:
上面的 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"
);
回答by Hearen
Just F12
to enter developer mode and check the sourcethere you can then search validateXML
and you are to locate a very long complete XML checkerfor your reference.
只需F12
进入开发人员模式并检查源代码,您就可以搜索validateXML
并找到一个非常长的完整XML 检查器供您参考。
I am using react
and stuff using the DOMParser
to present the error message as:
我正在使用react
和使用的东西DOMParser
将错误消息显示为:
handleXmlCheck = () => {
const { fileContent } = this.state;
const parser = new window.DOMParser();
const theDom = parser.parseFromString(fileContent, 'application/xml');
if (theDom.getElementsByTagName('parsererror').length > 0) {
showErrorMessage(theDom.getElementsByTagName('parsererror')[0].getElementsByTagName('div')[0].innerHTML);
} else {
showSuccessMessage('Valid Xml');
}
}
回答by Muhammad Haroon Iqbal
Basic xml validator in javscript. This code may not valid for advance xml but basic xml.
javscript 中的基本 xml 验证器。此代码可能对高级 xml 无效,但对基本 xml 无效。
function xmlValidator(xml){
// var xml = "<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>";
while(xml.indexOf('<') != -1){
var sub = xml.substring(xml.indexOf('<'), xml.indexOf('>')+1);
var value = xml.substring(xml.indexOf('<')+1, xml.indexOf('>'));
var endTag = '</'+value+'>';
if(xml.indexOf(endTag) != -1){
// console.log('xml is valid');
// break;
}else{
console.log('xml is in invalid');
break;
}
xml = xml.replace(sub, '');
xml = xml.replace(endTag, '');
console.log(xml);
console.log(sub+' '+value+' '+endTag);
}
}
var xml = "<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>";
xmlValidator(xml);