首頁 > web前端 > js教程 > 如何將XML轉換為類似JSON的JavaScript對象

如何將XML轉換為類似JSON的JavaScript對象

Jennifer Aniston
發布: 2025-03-02 01:12:10
原創
447 人瀏覽過

How to Convert XML to a JSON-Like JavaScript Object

核心要點

  • XML2jsobj 函數可將 XML 數據轉換為 JavaScript 對象。此函數遞歸分析 XML 文檔 DOM 樹的每個節點,並返回一個 JavaScript 對象,這對於數據檢索更為方便。
  • 雖然 XML2jsobj 具有跨瀏覽器兼容性,並且可以快速處理大型 XML 文檔,但僅應在實際需要時使用。如果您只檢索一個或兩個 XML 節點值,則使用 DOM 或 XPath 方法會更快。
  • 將 XML 轉換為 JavaScript 對象的過程涉及解析 XML 數據並將其轉換為 JavaScript 可以理解和操作的格式。這允許更直觀、更高效的數據訪問和操作。

在之前的文章《如何用 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 的一些說明:

  1. XML 屬性和子元素之間沒有區別——如果它們具有相同的名稱,則將返回一個項目數組,其中屬性位於索引 0。
  2. 僅在實際需要時才應使用 XML2jsobj。如果您只檢索一個或兩個 XML 節點值,則使用 DOM 或 XPath 方法會更快。
  3. 該代碼與跨瀏覽器兼容(包括 IE6),並且可以快速處理大型 XML 文檔。也就是說,它可能不適用於所有情況。它可能不應優先於從服務器返回 JSON。

您可以查看演示頁面或下載代碼和示例以用於您自己的項目。我希望您覺得它有用——如果您發現它減輕了一些 XML 難題,請告訴我!

關於將 XML 轉換為 JavaScript 對象的常見問題解答 (此部分已在原文基礎上進行了精簡和調整,避免重複)

這部分內容與原文重複,已省略。 原文中常見問題解答部分內容冗餘且與代碼示例關聯性不強,因此在偽原創過程中進行了精簡。

以上是如何將XML轉換為類似JSON的JavaScript對象的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板