11

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

InvalidCharacterError在尝试运行时进入 IE11doc.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 文档。

4

2 回答 2

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());
于 2013-12-24T18:23:59.197 回答
-1

I have always been very reluctant to use non-ASCII characters inside source code. Try escaping the string; maybe it helps.

doc.createElement("\u0412\u044B\u0431\u043E\u0440\u043A\u0430")
于 2013-12-27T10:49:59.577 回答