ホームページ > ウェブフロントエンド > jsチュートリアル > XMLをJSONのようなJavaScriptオブジェクトに変換する方法

XMLをJSONのようなJavaScriptオブジェクトに変換する方法

Jennifer Aniston
リリース: 2025-03-02 01:12:10
オリジナル
463 人が閲覧しました

How to Convert XML to a JSON-Like JavaScript Object

コアポイント

  • XML2JSOBJ関数は、XMLデータをJavaScriptオブジェクトに変換します。この関数は、XMLドキュメントDOMツリーの各ノードを再帰的に分析し、JavaScriptオブジェクトを返します。これは、データの取得により便利です。
  • XML2JSOBJはクロスブラウザーの互換性であり、大規模なXMLドキュメントをすばやく処理できますが、実際に必要な場合にのみ使用する必要があります。 1つまたは2つのXMLノード値のみを取得する場合、DOMまたはXPathメソッドを使用する方が速いです。
  • XMLをJavaScriptオブジェクトに変換するプロセスには、XMLデータを解析し、JavaScriptが理解して操作できる形式に変換することが含まれます。これにより、より直感的で効率的なデータアクセスと操作が可能になります。

前の記事「XMLをPHPでJSONプロキシサーバーを作成する方法」では、XMLメッセージをAJAXで利用可能なJSONに変換するシステムを作成しました。これは、PHPまたは他の適切なサーバー側プロセスを実行する場合に最適です。しかし、JavaScriptに限定されている場合はどうなりますか? XMLドキュメントのデータへのランダムアクセスは興味深いものではありません。 DOMまたはXPathメソッドを使用できますが、MyOBJ.List [0] .Property1などのネイティブ(JSONで生成された)JavaScriptオブジェクトプロパティほど簡単ではありません。同じXMLドキュメントでデータに頻繁にアクセスする場合、最初にJavaScriptオブジェクトに変換する方がより実用的かもしれません。コードを書く準備はできていますか? ...

xml2jsobj関数

XMLドキュメントDOMツリーの各ノードを再帰的に分析し、JavaScriptオブジェクトを返す関数を書き込みます。この関数は、開始ノード(通常はルートドキュメメント)を渡し、オブジェクト(内部指定データ)を返します。

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オブジェクトに変換します。

したがって、example.xmlが次のXMLデータを返します:
// 处理响应
function XHRhandler() {
    if (xhr.readyState == 4) {
        var obj = XML2jsobj(xhr.responseXML.documentElement);

        // 对返回的数据执行某些操作...
        console.log(obj);

        xhr = null;
    }
}
ログイン後にコピー

xml2jsobj(xhr.responsexml.documentelement)は、次のオブジェクトを返します
<?xml version="1.0"?><statuses><status><id>1</id><text>Hello!</text></status></statuses>
ログイン後にコピー
したがって、obj.status.textを使用して「Hello!」を取得できます。

{
    status: {
        id: ["one", 1],
        text: "Hello!"
    }
}
ログイン後にコピー
予防策

XML2JSOBJに関するいくつかのメモ:

  1. XML属性と子要素に違いはありません。同じ名前がある場合、属性がインデックス0にあるアイテムの配列が返されます。
  2. xml2jsobjは、実際に必要な場合にのみ使用する必要があります。 1つまたは2つのXMLノード値のみを取得する場合、DOMまたはXPathメソッドを使用する方が速いです。
  3. このコードはクロスブラウザー互換(IE6を含む)であり、大規模なXMLドキュメントをすばやく処理できます。とはいえ、それはすべての場合に機能しないかもしれません。おそらく、サーバーからJSONを返すことよりも優先されるべきではありません。

デモページを表示するか、独自のプロジェクトで使用するコードと例をダウンロードできます。お役に立てば幸いです。XMLパズルを軽減している場合は、お知らせください。

XMLをJavaScriptオブジェクトに変換するFAQ コンテンツのこの部分は元のテキストから繰り返され、省略されています。 元のテキストのFAQの内容は冗長であり、コードの例と高度に相関していないため、擬似オリジナルプロセスで合理化されています。

以上がXMLをJSONのようなJavaScriptオブジェクトに変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート