Ole*_*gas 11 javascript xml internet-explorer internet-explorer-11 microsoft-edge
我需要创建一个包含节点的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文档.
也许 IE11 存在与 Firefox 过去类似的问题:
\n\nhttps://bugzilla.mozilla.org/show_bug.cgi?id=431701
\n\n这意味着虽然您的页面正在加载正确的编码,但 IE11 正在使用默认编码创建新文档,这不是预期的编码。除了查看 IE11 源代码(我们没有)之外,没有其他方法可以检查这一点。
\n\n您是否尝试过在元素名称之外的其他位置添加非 ASCII 字符?比如属性值或文本节点?
\n\n我搜索了如何更改创建的文档编码,但没有找到任何解决方案。
\n\n为了解决您的问题,我建议使用 DOMParser 并从 XML 字符串生成文档,如下所示:
\n\nvar parser=new DOMParser();\nvar xmlDoc=parser.parseFromString(\'<?xml version="1.0" encoding="UTF-8"?><\xd0\x92\xd1\x8b\xd0\xb1\xd0\xbe\xd1\x80\xd0\xba\xd0\xb0>\xd0\x92\xd1\x8b\xd0\xb1\xd0\xbe\xd1\x80\xd0\xba\xd0\xb0 \xd1\x82\xd0\xb5\xd0\xba\xd1\x81\xd1\x82\xd0\xb0</\xd0\x92\xd1\x8b\xd0\xb1\xd0\xbe\xd1\x80\xd0\xba\xd0\xb0>\',"text/xml");\nRun Code Online (Sandbox Code Playgroud)\n\n所有浏览器似乎都支持它进行 XML 解析。有关 DOMParser 的更多信息,请访问以下链接,包括如何提供与旧版 IE 版本的向后兼容性:
\n\nhttp://www.w3schools.com/dom/dom_parser.asp
\n\nhttps://developer.mozilla.org/en-US/docs/Web/API/DOMParser
\n\n如果您不想仅通过连接字符串来生成 XML,则可以使用某种 XML 生成器,如下例所示: http: //jsfiddle.net/UGYWx/6/
\n\n然后您可以以更安全的方式轻松创建 XML:
\n\nvar builder = new XMLBuilder("rootElement");\nbuilder.text(\'Some text\');\n\nvar element = builder.element("someElement", {\'attr\':\'value\'});\nelement.text("This is a text.");\n\nbuilder.text(\'Some more Text\');\nbuilder.element("emptyElement");\nbuilder.text(\'Even some more text\');\n\nbuilder.element("emptyWithAttributes", {\'a1\': \'val1\', \'a2\' : \'val2\'});\n\n$(\'div\').text(builder.toString());\nRun Code Online (Sandbox Code Playgroud)\n