我需要创建一个包含节点的xml文档(使用JavaScript),该文档以俄语命名。
尝试运行InvalidCharacterError
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文档。
答案 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")