読者です 読者をやめる 読者になる 読者になる

IT業界のすみっこ暮らし

ふと気がついたときの記録

Javascriptでのxmlパーシング

開発 JavaScript

パーシングするxmlはこんなイメージ(RSSみたいな)

<item>
    <content>
        <title>title1</title>
        <desc>desc2</desc>
        <flag>1</flag>
    </content>
    <content>
        <title>title2</title>
        <desc>desc2</desc>
        <flag>2</flag>
    </content>
</item>

javascriptxmlをパーシング

// XMLパーシング用
function fnc_Xmlparse(xml) {
    var arrayList = new Array();
    var nodecount = $(xml).find('content').length;
    var nodename = $(xml).find('content').children();
    var childcount = $(xml).find('content').children().size();
    var nodeLen = childcount / nodecount;

    var j = 0;
    $(xml).find("content").each(function() {
        var obj = {};
        for (var i = 0; i < nodeLen; i++) {
            obj[nodename[i].tagName] = $(this).find(nodename[i].tagName).text()
        }
        arrayList[j] = obj;
        j++;
    });
    return arrayList;
}

// XML条件付きパーシング用(条件は1つのみ)
// xml : xmlデータ
// filter : 条件を付ける項目名
// param : 条件値
// ex) fnc_XmlFilterParse(xmlObj, "flag", "2");
function fnc_XmlFilterParse(xml, filter, param) {
    var arrayList = new Array();
    var nodecount = $(xml).find('content').length;
    var nodename = $(xml).find('content').children();
    var childcount = $(xml).find('content').children().size();
    var nodeLen = childcount / nodecount;

    var j = 0;
    $(xml).find("content").each(function() {
        var obj = {};
        if ($(this).find(filter).text() == param) {
            for (var i = 0; i < nodeLen; i++) {
                obj[nodename[i].tagName] = $(this).find(nodename[i].tagName).text()
            }
            arrayList[j] = obj;
            j++;
        }
    });
    return arrayList;
}