11

我需要创建一个包含节点的xml文档(使用JavaScript),它以俄语命名。无法在IE11中创建带有西里尔文名称的XML节点

我在IE11获得InvalidCharacterError试图运行时doc.createElement("Выборка")

docvar doc = document.implementation.createDocument("", "", null)

建立在这个代码工作没有任何问题的其他浏览器。

如何解决?问题的根源是什么?

的jsfiddle例如http://jsfiddle.net/e4tUH/1/

我的职位上connect.microsoft.comhttps://connect.microsoft.com/IE/feedback/details/812130/cant-create-xml-node-with-cyrillic-name-in-ie11

当前的解决办法:切换到IE11 IE10与X-UA-Compatible元标记和使用window.ActiveXObject(...)创建XML文档。

+0

检查您的HTML文档是否包含提示UTF-8的''元素,还检查HTTP响应标头,以及您是否指定'doctype'。 – vbence

+0

确保您的源文件本身真正以UTF-8编码。 – 2013-12-18 16:31:31

+0

我的来源是UTF-8。指定了Doctype。 – Olegas

回答

2

也许IE11具有类似于火狐在过去的一个问题:

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()); 
+0

这不好,因为'我需要建立我的XML标签不是XML而是简单的文本。这是更容易出错的解决方案=(顺便说一句,即使我用字符串解析一个带有俄罗斯标签名称的文档并且节点被正确解析('nodeName'正确显示),我无法创建任何其他带有俄语名称的节点这个文档 – Olegas

+0

你是否像以前一样使用'createDocument()'创建文档时遇到同样的错误? – visola

+0

是的,和以前一样的'InvalidCharacterError'我可以用jsFiddle演示 – Olegas

-1

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

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