0

次のような XML データがあります。

<?xml version='1.0' encoding='ISO-8859-1'?>
<cocktail_list>
<cocktail>
<name> Blue Hawaiian </name>
<ingredient>
<quantity>1</quantity>
<shot>White Rum</shot>
</ingredient>
<ingredient>
<quantity>1</quantity>
<shot>Blue Curacao</shot>
</ingredient>
<ingredient>
<quantity>2</quantity>
<shot>Pineapple Juice</shot>
</ingredient>
<ingredient>
<quantity>1</quantity>
<shot>Coconut Cream</shot>
</ingredient>
</cocktail>
<cocktail>...
</cocktail_list>

Javascript を使用して、ネストされた/連想配列 (またはオブジェクトを使用) を次のように作成したいと思います: arrayName[Blue Hawaiian[White Rum => 1, Blue Curaco => 2, Pineapple Juice => 1...], name[ショット => 量、...]]

これで、XML を反復処理する方法はわかりましたが、これを配列に変換する最善の方法がわかりません。

どんな助けでも大歓迎です。

4

2 に答える 2

2

jquery.parseXML を使用する

var x = $.parseXML(xml_str);
var obj = {};
$(x).find("*").each(function(){
    obj[this.nodeName] = $(this).text;
});

次に、obj は obj["cocktail_list"]["cock_tail"]["name"] で操作できる json オブジェクトです。ここでは配列を考慮しませんでした。cock_tail のような配列の場合、それが既に obj にあるかどうかを確認し、ある場合はプッシュする必要があります。

于 2011-11-13T12:53:24.997 に答える
1

ここでやりたいことは、オブジェクト グラフを作成することです。これは、XML ツリーを再帰的にトラバーサルすることで簡単に作成できます。すべての JavaScript オブジェクトはマップです (別名「連想配列」ですが、配列ではないため、この用語は好きではありません)。オブジェクトのプロパティには、リテラル ( obj.foo) を使用したドット表記、および[]文字列 ( obj["foo"])を使用した表記を介してアクセスできます。

var obj = {};            // A blank object
obj.foo = "bar";         // Now it has a property called "foo"
console.log(obj.foo);    // Accessing the property via dotted notation and a literal
console.log(obj["foo"]); // You can also use [] notation and a string
var s = "foo";
console.log(obj[s]);     // And of course the string can be the result of any expression,
                         // including coming from a variable

[]文字列名と組み合わせた表記法を使用して、構造をたどり、グラフを構築する方法を簡単に確認できます。例と非常によく似た結果にアクセスしますが、わずかな違いがあります。おそらく、マップをカクテル名でキー設定しingredients、材料をリストするプロパティを (オブジェクトの配列として、または単に材料名をキーとして使用して) 持つことを選択します。ただし、ingredientsプロパティを持たずに、代わりにカクテル オブジェクトに材料を直接含めることもできます。次に例を示します。

console.log(cocktails["Blue Hawaiian"]["White Rum"].name);       // "shot"
console.log(cocktails["Blue Hawaiian"]["White Rum"].quantity);   // 1

またはもちろん

var bh = cocktails["Blue Hawaiian"];
console.log(bh["White Rum"].name);       // "shot"
console.log(bh["White Rum"].quantity);   // 1

アクセス方法や個人的なスタイルに応じて、結果として得られるオブジェクト グラフを構築するさまざまな方法があります。

構成部品は次のとおりです。

  1. オブジェクトの作成。簡単だ:

    var obj = {};
    
  2. プロパティ リテラルのドット表記を使用してオブジェクトにプロパティを追加します。

    obj.propertyName = value;
    
  3. プロパティの名前がリテラルではなく文字列式に由来する括弧付き表記法を使用して、オブジェクトにプロパティを追加します。

    obj["propertyName"] = value;
    // or
    var s = "propertyName";
    obj[s] = value;
    // or even
    var s1 = "property", s2 = "Name";
    obj[s1 + s2] = value;
    

    あなたの場合、XMLnodeNameまたは.xml からプロパティ名を取得できますnodeValue

  4. オブジェクトを別のオブジェクトの中に入れる。これは実際には、割り当てている値がオブジェクト参照であるプロパティに割り当てているだけです。

    var outer = {};
    var inner = {};
    inner.foo = "I'm foo";      // Putting the string "I'm foo" on propety `foo`
    outer.bar = inner;          // Putting the `inner` object on the property `bar`
    console.log(outer.bar.foo); // "I'm foo"
    

XML をトラバースする方法を既に知っているので、そのトラバーサルの結果からオブジェクト グラフを作成することができます。これを実行するための実際のコードは書きません。繰り返しになりますが、オブジェクト グラフをどのように構築したいかという点で多くの決定を下す必要がありますが、それは完全に自分のやりたい方法次第です。

于 2011-11-13T12:12:37.027 に答える