核心要點
在之前的文章《如何用 PHP 創建 XML 到 JSON 代理服務器》中,我們創建了一個系統,將 XML 消息轉換為 Ajax 可用的 JSON。如果您運行 PHP 或其他合適的服務器端進程,這非常棒。但是,如果您僅限於 JavaScript 呢?隨機訪問 XML 文檔中的數據並不有趣。您可以使用 DOM 或 XPath 方法,但它們不如原生(JSON 生成的)JavaScript 對象屬性(例如 myobj.list[0].property1)那樣容易。如果您經常訪問同一個 XML 文檔中的數據,則首先將其轉換為 JavaScript 對象可能比較實用。準備編寫一些代碼了嗎? ……
XML2jsobj 函數
我們將編寫一個函數,遞歸分析 XML 文檔 DOM 樹的每個節點並返回一個 JavaScript 對象。該函數傳遞一個起始節點(通常是根 documentElement),並返回一個對象(內部命名為 data):
function XML2jsobj(node) { var data = {}; // 添加值 function Add(name, value) { if (data[name]) { if (data[name].constructor != Array) { data[name] = [data[name]]; } data[name][data[name].length] = value; } else { data[name] = value; } }; // 元素属性 var c, cn; for (c = 0; cn = node.attributes[c]; c++) { Add(cn.name, cn.value); } // 子元素 for (c = 0; cn = node.childNodes[c]; c++) { if (cn.nodeType == 1) { if (cn.childNodes.length == 1 && cn.firstChild.nodeType == 3) { // 文本值 Add(cn.nodeName, cn.firstChild.nodeValue); } else { // 子对象 Add(cn.nodeName, XML2jsobj(cn)); } } } return data; }
XML 轉換
我們的 Ajax 調用可以從 Web 服務檢索 XML:
// 示例 XML 提要 var url = "example.xml"; // AJAX 请求 var xhr = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP")); xhr.onreadystatechange = XHRhandler; xhr.open("GET", url, true); xhr.send(null);
我們的 XMLHttpRequest onreadystatechange 處理程序接收 XML 數據並將其轉換為 JavaScript 對象:
// 处理响应 function XHRhandler() { if (xhr.readyState == 4) { var obj = XML2jsobj(xhr.responseXML.documentElement); // 对返回的数据执行某些操作... console.log(obj); xhr = null; } }
因此,如果 example.xml 返回以下 XML 數據:
<?xml version="1.0"?><statuses><status><id>1</id><text>Hello!</text></status></statuses>
XML2jsobj(xhr.responseXML.documentElement) 將返回以下對象:
{ status: { id: ["one", 1], text: "Hello!" } }
因此,您可以使用 obj.status.text 檢索“Hello!”文本。
注意事項
關於 XML2jsobj 的一些說明:
您可以查看演示頁面或下載代碼和示例以用於您自己的項目。我希望您覺得它有用——如果您發現它減輕了一些 XML 難題,請告訴我!
關於將 XML 轉換為 JavaScript 對象的常見問題解答 (此部分已在原文基礎上進行了精簡和調整,避免重複)
這部分內容與原文重複,已省略。 原文中常見問題解答部分內容冗餘且與代碼示例關聯性不強,因此在偽原創過程中進行了精簡。
以上是如何將XML轉換為類似JSON的JavaScript對象的詳細內容。更多資訊請關注PHP中文網其他相關文章!