无法在IE11中创建具有西里尔名称的XML节点

时间:2013-12-18 14:50:56

标签: javascript xml internet-explorer internet-explorer-11 microsoft-edge

我需要创建一个包含节点的xml文档(使用JavaScript),该文档以俄语命名。

尝试运行InvalidCharacterError

时,我在IE11中获得doc.createElement("Выборка")

doc是使用var doc = document.implementation.createDocument("", "", null)

创建的

在其他浏览器中,此代码正常运行。

怎么解决?什么是问题的根源?

jsFiddle示例http://jsfiddle.net/e4tUH/1/

我的帖子 connect.microsoft.com https://connect.microsoft.com/IE/feedback/details/812130/cant-create-xml-node-with-cyrillic-name-in-ie11

当前解决方法:使用X-UA-Compatible元标记将IE11切换到IE10,并使用window.ActiveXObject(...)创建XML文档。

2 个答案:

答案 0 :(得分:2)

也许IE11的问题类似于Firefox过去的问题:

https://bugzilla.mozilla.org/show_bug.cgi?id=431701

这意味着虽然您的页面正在加载正确的编码,但IE11正在使用默认编码创建新文档,该编码不是预期的编码。除了查看我们没有的IE11源代码之外,没有办法检查它。

您是否尝试在元素名称之外的其他位置添加非ASCII字符?像属性值或文本节点?

我搜索了如何更改创建的文档编码,但没有找到任何解决方案。

要解决您的问题,我建议使用DOMParser并从XML字符串生成文档,如下所示:

var parser=new DOMParser();
var xmlDoc=parser.parseFromString('<?xml version="1.0" encoding="UTF-8"?><Выборка>Выборка текста</Выборка>',"text/xml");

所有浏览器似乎都支持XML解析。有关DOMParser的更多信息,请参见以下链接,包括如何提供与旧版IE的向后兼容性:

http://www.w3schools.com/dom/dom_parser.asp

https://developer.mozilla.org/en-US/docs/Web/API/DOMParser

如果您不想仅通过连接字符串来生成XML,则可以使用某种类型的XML构建器,如下例所示:http://jsfiddle.net/UGYWx/6/

然后,您可以更安全地轻松创建XML:

var builder = new XMLBuilder("rootElement");
builder.text('Some text');

var element = builder.element("someElement", {'attr':'value'});
element.text("This is a text.");

builder.text('Some more Text');
builder.element("emptyElement");
builder.text('Even some more text');

builder.element("emptyWithAttributes", {'a1': 'val1', 'a2' : 'val2'});

$('div').text(builder.toString());

答案 1 :(得分:-1)

我一直非常不愿意在源代码中使用非ASCII字符。尝试转义字符串;也许有帮助。

doc.createElement("\u0412\u044B\u0431\u043E\u0440\u043A\u0430")