Javascript 在带有XML字符串内容的边缘中使用Microsoft.XMLDOM XML解析器引发错误

Javascript 在带有XML字符串内容的边缘中使用Microsoft.XMLDOM XML解析器引发错误,javascript,xml,xml-parsing,microsoft-edge,xmldom,Javascript,Xml,Xml Parsing,Microsoft Edge,Xmldom,Microsoft EDGE中的Microsoft.XMLDOM XML解析器出现以下错误: 脚本(1,1) 有时它会说开始标记与结束标记不匹配。其他时候,它会产生另一个错误。我希望我能提供实际的错误消息,但我远离Windows机器,这是我记忆中的东西 完全相同的XML内容在Firefox和其他浏览器中工作。有人知道发生了什么事吗?这可能是一个简单的修复,但我没有一台Windows电脑 以下是我的XML: <s:RichText x="118" visible="true" y="238"

Microsoft EDGE中的Microsoft.XMLDOM XML解析器出现以下错误:

脚本(1,1)

有时它会说开始标记与结束标记不匹配。其他时候,它会产生另一个错误。我希望我能提供实际的错误消息,但我远离Windows机器,这是我记忆中的东西

完全相同的XML内容在Firefox和其他浏览器中工作。有人知道发生了什么事吗?这可能是一个简单的修复,但我没有一台Windows电脑

以下是我的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);
函数validateXML(txt){
//IE代码
if(window.ActiveXObject){
var xmlDoc=新的ActiveXObject(“Microsoft.XMLDOM”);
xmlDoc.async=“false”;
xmlDoc.loadXML(txt);
如果(xmlDoc.parseError.errorCode!=0){
txt=“错误代码:”+xmlDoc.parseError.errorCode+“\\n”;
txt=txt+“错误原因:”+xmlDoc.parseError.Reason;
txt=txt+“错误行:”+xmlDoc.parseError.Line;
返回txt;
}
否则{
返回“未发现错误”;
}
}
//Mozilla、Firefox、Opera等。
else if(document.implementation.createDocument){
var parser=新的DOMParser();
var xmlDoc=parser.parseFromString(txt,“text/xml”);
if(xmlDoc.getElementsByTagName(“parsererror”).length>0){
返回xmlDoc.getElementsByTagName(“parsererror”)[0];
}
否则{
返回“未发现错误”;
}
}
否则{
返回“您的浏览器不支持XML验证”;
}
}
var xml='';
var result=validateXML(xml);

使用Windows 10的人可以运行此功能吗?我已经创建了一个代码笔

我的其他代码中有一个错误导致了我遇到的错误,但我还发现,当Edge或IE中出现错误时,他们会在控制台中记录错误

此外,支持从IE10或11开始使用DOMParser。解决方案是切换if语句条件以检查Domparser

if(window.DOMParser | | document.implementation.createDocument)

然后在parse方法周围放置一个try-catch块

尽管如此,IE并没有给出行或列错误信息。我还没能对它进行广泛的测试

可对更新后的数据进行测试:

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>";
}
函数validateXML(txt){
//Mozilla、Firefox、Opera、更新的IE和Edge等。
if(document.implementation.createDocument){
log(“在创建domparser之前”);
var parser=新的DOMParser();
试一试{
var xmlDoc=parser.parseFromString(txt,“text/xml”);
}捕获(错误){
console.log(错误);
};
log(“在DomParser instance.Errors之后:”+xmlDoc.getElementsByTagName(“parsererror”).length);
if(xmlDoc.getElementsByTagName(“parsererror”).length>0){
返回xmlDoc.getElementsByTagName(“parsererror”)[0];
}
否则{
返回“未发现错误”;
}
}
//旧IE的代码
else if(window.ActiveXObject){
var xmlDoc=新的ActiveXObject(“Microsoft.XMLDOM”);
xmlDoc.async=“false”;
xmlDoc.loadXML(txt);
如果(xmlDoc.parseError.errorCode!=0){
txt=“错误代码:”+xmlDoc.parseError.errorCode+“\\n”;
txt=txt+“错误原因:”+xmlDoc.parseError.Reason;
txt=txt+“错误行:”+xmlDoc.parseError.Line;
log(“我在Windows IE中工作”);
返回txt;
}
否则{
返回“未发现错误”;
}
}
否则{
返回“您的浏览器不支持XML验证”;
}
}
var xml='test';
var result=validateXML(xml);
控制台日志(结果);
如果(结果类型=“字符串”){
document.body.innerHTML=“+结果+”;
}
否则{
document.body.innerHTML=“”+结果.outerHTML+”;
}

我在Windows 10上的IE11、Edge、Firefox和Chrome中都无法使用你的代码笔,但这不是因为Windows 10。这是因为您尚未声明要将命名空间前缀
s
绑定到的URL。我还希望上面更大的XML文档由于同样的原因无法解析。