0

この関数を使用してXMLファイルを解析しています。

function xmlToJson(xml) {
    var attr, child, attrs = xml.attributes,
        children = xml.childNodes,
        key = xml.nodeType,
        obj = {},
        i = -1,
        o = 0;
    if (key == 1 && attrs.length) {
        obj[key = o] = {};
        while (attr = attrs.item(++i)) {
            obj[key][attr.nodeName] = attr.nodeValue;
        }
        i = -1;
    } else if (key == 3) {
        obj = xml.nodeValue;
    }
    while (child = children.item(++i)) {
        key = child.nodeName;
        if (obj.hasOwnProperty(key)) {
            if (obj.toString.call(obj[key]) != '[object Array]') {
                obj[key] = [obj[key]];
            }
            obj[key].push(xmlToJson(child));
        } else {
            obj[key] = xmlToJson(child);
        }
    }
    return obj;
}

次のファイルを解析すると、次の文字列が生成されます(JSON.stringifyを使用して表示)。

ファイル(コンテンツが表示されないため、「<」文字は含まれていませんが、私のファイルには明らかにそれらがあります):

?xml version="1.0" encoding="UTF-8" standalone="no"?>
playlist>
vid src="video/intro.mp4" type="video/mp4"/>
vid src="video/intro.mp4" type="video/mp4"/>
/playlist>

JSON:

{"playlist":{"#text":["\n","\n","\n"],"vid":[{"0":{"src":"video/intro.mp4","type":"video/mp4"}},{"0":{"src":"video/intro.mp4","type":"video/mp4"}}]}}

しかし、出力は次のようにする必要があります。

[{"0":{"src":"video/intro.mp4","type":"video/mp4"}},{"0":{"src":"video/intro.mp4","type":"video/mp4"}}]

noobの質問で申し訳ありませんが、私はJSONと同じくらいJSに慣れていません。彼らと一緒にいる日数は、片方の手の指で数えることができます。

前もって感謝します。

編集:解決済み-自分で解決:オブジェクトを文字列に変換できないようにするのではなく、変換して「サブストリング」してから、残りの文字列を再変換することにしました。結果は次のとおりです。

JSON.parse(JSON.stringify(jsonPlaylist).substring(44,JSON.stringify(jsonPlaylist).length-2));

それjsonPlaylistが、解析されたXMLファイル全体を含む文字列varであると仮定します。

4

1 に答える 1

1

php

$yourxmlstring = rtrim(ltrim($yourxmlstring, '{"playlist":{"#text":["\n","\n","\n"],"vid":'),"}}");

基本的に私がしたことは、あなたが望まないものを使用ltrimrtrimて切り落とすことでした。

js

str.replace(/{"playlist":{"#text":\["\\n","\\n","\\n"\],"vid":/,'').replace(/}+$/,'');
于 2012-08-07T10:59:50.340 に答える