瀏覽器對不合法XML元素名稱的處理

因程式Bug搞出一個包含無效元素名稱的XML,發現IE的反應很有趣,XML物件的firstChild屬性會傳回null。

XML規格,XML元素名稱必須符合以下條件:

  • 包含字母、數字及其他字元
  • 不可以數字或標點符號起始
  • 開頭不可以是xml, XML或Xml
  • 不能包含空白

我寫了個範例挑戰了這個禁忌,順手試了一下不合法XML格式在各瀏覽器下的反應。

var xmlStr ="<data><0>A</0></data>";
var xd = null;
if (window.ActiveXObject) {
    xd = new ActiveXObject("Microsoft.XMLDOM");
    xd.async = false; xd.loadXML(xmlStr);
}
else if (typeof DOMParser != "undefined")
    xd = new DOMParser().parseFromString(xmlStr, "text/xml");
var elem = xd.firstChild;
if (elem == null) 
    alert("firstChild is null");
else
    alert(elem.xml || (new XMLSerializer()).serializeToString(elem));

【測試結果】

IE:
傳回null

Firefox:
得到<?xml-stylesheet href="chrome://global/locale/intl.css" type="text/css"?>

Chrome/Safari:
<data><parsererror xmlns="http://www.w3.org/1999/xhtml" style="display: block; white-space: pre; border: 2px solid #c77; padding: 0 1em 0 1em; margin: 1em; background-color: #fdd; color: black"><h3>This page contains the following errors:</h3><div style="font-family:monospace;font-size:12px">error on line 1 at column 8: StartTag: invalid element name
</div><h3>Below is a rendering of the page up to the first error.</h3></parsererror></data>

Opera:
<parsererror xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml">Error<sourcetext>Unknown source</sourcetext></parsererror>

本次最人性化回應獎,我決定頒給Chrome/Safari~~

歡迎推文分享:
Published 23 October 2009 03:55 PM 由 Jeffrey
Filed under: ,
Views: 12,312



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<October 2009>
SunMonTueWedThuFriSat
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication