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")