带有 XML 字符串内容的 Edge 中的 Microsoft.XMLDOM XML 解析器引发错误
我在 Microsoft EDGE 中使用 Microsoft.XMLDOM XML 解析器时遇到以下错误:
I'm getting the following error with the Microsoft.XMLDOM XML parser in Microsoft EDGE:
脚本(1,1)
有时它会说开始标签与结束标签不匹配
.有时它会给出另一个错误.我希望我能提供实际的错误消息,但我远离 Windows 机器,这是我记忆中的内容.
Sometimes it says start tag does not match end tag
. And other times it gives another error. I wish I could provide the actual error messages but I'm away from a Windows machine and this is what I remember from memory.
完全相同的 XML 内容适用于 Firefox 和其他浏览器.谁能看到发生了什么?这可能是一个简单的修复,但我没有 Windows 计算机.
The exact same XML content works in Firefox and other browsers. Can anyone see what is going on? This could be an easy fix but again I don't have a Windows computer.
这是我的 XML:
<s:RichText x="118" visible="true" y="238" text="Text" fontSize="58.73271028037384">
<s:filters>
<BorderStrokeFilter alpha="1" angle="45" blurX="3" blurY="3" color="#FFFFFF" distance="0" hideObject="false" inner="false" knockout="false" multiplier="6" quality="3" strength="30" weight="3" xmlns="library://ns.flexcapacitor.com/flex"/>
<BorderStrokeFilter alpha="1" angle="45" blurX="3" blurY="3" color="#000000" distance="0" hideObject="false" inner="false" knockout="false" multiplier="6" quality="3" strength="30" weight="3" xmlns="library://ns.flexcapacitor.com/flex"/>
</s:filters>
<s:textFlow>
<s:TextFlow whiteSpaceCollapse="preserve" version="3.0.0" xmlns:s="library://ns.adobe.com/flex/spark"><s:p><s:span s:fontWeight="bold">Here is some text</s:span></s:p></s:TextFlow>
</s:textFlow>
</s:RichText>
这是我的验证方法:
function validateXML(txt) {
// code for IE
if (window.ActiveXObject) {
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(txt);
if (xmlDoc.parseError.errorCode != 0) {
txt = "Error Code: " + xmlDoc.parseError.errorCode + "\n";
txt = txt + "Error Reason: " + xmlDoc.parseError.reason;
txt = txt + "Error Line: " + xmlDoc.parseError.line;
return txt;
}
else {
return "No errors found";
}
}
// Mozilla, Firefox, Opera, etc.
else if (document.implementation.createDocument) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(txt, "text/xml");
if (xmlDoc.getElementsByTagName("parsererror").length > 0) {
return xmlDoc.getElementsByTagName("parsererror")[0];
}
else {
return "No errors found";
}
}
else {
return "Your browser does not support XML validation";
}
}
var xml = '<s:RichText x="118"></s:RichText>';
var result = validateXML(xml);
使用 Windows 10 的人可以运行这个吗?我在这里创建了一个codepen.
Can someone with Windows 10 run this? I've created a codepen here.
推荐答案
我的其他代码中有一个错误导致了我遇到的错误,但我也发现当 Edge 或 IE 出现错误时,他们会记录控制台中的错误.
There was an error in my other code that was causing the error I was encountering but I also found out that when there's an error in Edge or IE they will log an error in the console.
此外,从 IE 10 或 11 开始支持 DOMParser.解决方法是切换if语句条件来检查Domparser
Also, starting around IE 10 or 11 DOMParser is supported. The solution is to switch the if statement conditions to check for Domparser
if (window.DOMParser || document.implementation.createDocument)
if (window.DOMParser || document.implementation.createDocument)
然后在 parse 方法周围放置一个 try catch 块.
and then put a try catch block around the parse method.
虽然,它看起来不像 IE 提供行或列错误信息.我无法对其进行广泛的测试.
Although, it doesn't look like IE gives a line or column error information. I haven't been able to extensively test it.
可以测试更新的codepen:
function validateXML(txt) {
// Mozilla, Firefox, Opera, newer IE and Edge, etc.
if (document.implementation.createDocument) {
console.log("Before creating domparser");
var parser = new DOMParser();
try {
var xmlDoc = parser.parseFromString(txt, "text/xml");
} catch(error) {
console.log(error);
};
console.log("After DomParser instance. Errors: "+ xmlDoc.getElementsByTagName("parsererror").length);
if (xmlDoc.getElementsByTagName("parsererror").length > 0) {
return xmlDoc.getElementsByTagName("parsererror")[0];
}
else {
return "No errors found";
}
}
// code for older IE
else if (window.ActiveXObject) {
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(txt);
if (xmlDoc.parseError.errorCode != 0) {
txt = "Error Code: " + xmlDoc.parseError.errorCode + "\n";
txt = txt + "Error Reason: " + xmlDoc.parseError.reason;
txt = txt + "Error Line: " + xmlDoc.parseError.line;
console.log("I work in Windows IE");
return txt;
}
else {
return "No errors found";
}
}
else {
return "Your browser does not support XML validation";
}
}
var xml = '<s:RichText x="118" xmlns:s="f">test</f/></s:RichText>';
var result = validateXML(xml);
console.log(result);
if (typeof result == "string") {
document.body.innerHTML = "<pre>"+result+"</pre>";
}
else {
document.body.innerHTML = "<pre>"+result.outerHTML+"</pre>";
}
相关文章