2011-06-13 15 views
15

問題:如何在現代瀏覽器(除IE以外的任何瀏覽器)中對XML進行語法檢查?我看過a page on W3Schools其中包含一個XML語法檢查器。我不知道它是如何工作的,但我想知道我可以如何實現相同的行爲。使用JavaScript檢查XML錯誤

我已經對此事進行了很多搜索(沒有成功),並且我嘗試過使用DOM解析器來檢查我的XML是否「格式良好」(也沒有成功)。

 
var xml = 'Caleb'; 
var parser = new DOMParser(); 
var doc = parser.parseFromString(xml, 'text/xml'); 

我希望解析器告訴我,我有一個XML語法錯誤(即未封閉的標籤)。但是,它總是返回一個XML DOM對象,就好像根本沒有錯誤。

總而言之,我想知道如何使用JavaScript自動檢查XML文檔的語法。

P.S.有什麼辦法可以驗證XML文檔對DTD(使用JS,而不是IE)?

回答

24

編輯:這是一個更簡潔的例子,從MDN

var sMyString = "<a id=\"a\"><b id=\"b\">hey!<\/b><\/a>"; 
var oParser = new DOMParser(); 
var oDOM = oParser.parseFromString(sMyString, "text/xml"); 
// print the name of the root element or error message 
dump(oDOM.documentElement.nodeName == "parsererror" ? "error while parsing" : oDOM.documentElement.nodeName); 
+0

太棒了,這正是我所需要的。謝謝! – caleb531 2011-06-13 18:20:42

+0

函數'checkErrorXML'是在哪裏定義的? – Sudarshan 2013-11-08 09:03:58

+3

@DerrickRice來自MDN的代碼樣本是MIT許可的(如果在2010年之前添加的話)或公共領域。所以在這種情況下,這不是問題。 [參考文獻](https://developer.mozilla.org/en-US/docs/Project:MDN/About) – Jeremy 2013-12-20 05:20:58

1

NoBugs回答上面沒有用目前的Chrome爲我工作。我建議:

var sMyString = "<a id=\"a\"><b id=\"b\">hey!<\/b><\/a>"; 
var oParser = new DOMParser(); 
var oDOM = oParser.parseFromString(sMyString, "text/xml"); 
dump(oDOM.getElementsByTagName('parsererror').length ? 
    (new XMLSerializer()).serializeToString(oDOM) : "all good"  
);