Javascript XML数据到关联数组
我有如下XML数据:Javascript XML数据到关联数组,javascript,xml,arrays,object,associative,Javascript,Xml,Arrays,Object,Associative,我有如下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>
<?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>
蓝色夏威夷人
1.
白朗姆酒
1.
蓝橙
2.
菠萝汁
1.
椰子奶油
...
使用Javascript,我希望创建一个嵌套/关联数组(或使用对象),如下所示:
arrayName[蓝色夏威夷[白色朗姆酒=>1,蓝色库拉索酒=>2,菠萝汁=>1…],姓名[镜头=>数量,…]
现在我知道了如何遍历XML,但是我不知道如何最好地将其转换为数组
任何帮助都将不胜感激。您要做的是创建一个对象图,您可以通过递归遍历XML树轻松地完成该操作。每个JavaScript对象都是一个映射(也称为“关联数组”,但我不喜欢这个术语,因为它们不是数组)。对象的属性可以通过带文字(
obj.foo
)的点符号、和带字符串(obj[“foo”]
)的点符号来访问:
您可以看到,在遍历结构时,如何将[]
符号与字符串名称结合使用,以构建图形。您将访问与示例非常相似的结果,只是略有不同。我可能会选择使用鸡尾酒名称为映射设置关键帧,然后使用配料
属性列出配料(或者作为对象数组,或者仅使用配料名称作为关键帧)。但您可以选择不使用配料
属性,而是让鸡尾酒对象直接包含配料,例如:
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
根据您想要访问对象图的方式和您的个人风格,有许多不同的方法可以构造生成的对象图
组成部分包括:
var obj = {};
obj.propertyName = value;
obj["propertyName"] = value;
// or
var s = "propertyName";
obj[s] = value;
// or even
var s1 = "property", s2 = "Name";
obj[s1 + s2] = value;
在您的情况下,可以从XMLnodeName
或nodeValue
获取属性名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,因此应该可以根据遍历的结果继续构建对象图。我并没有编写实际的代码来实现这一点,因为同样,在如何构造对象图方面,有许多决策需要做出,而这些决策完全取决于您想要如何实现。您想要做的是创建一个对象图,您可以通过递归遍历XML树来轻松实现。每个JavaScript对象都是一个映射(也称为“关联数组”,但我不喜欢这个术语,因为它们不是数组)。对象的属性可以通过带文字(
obj.foo
)的点符号、和带字符串(obj[“foo”]
)的点符号来访问:
您可以看到,在遍历结构时,如何将[]
符号与字符串名称结合使用,以构建图形。您将访问与示例非常相似的结果,只是略有不同。我可能会选择使用鸡尾酒名称为映射设置关键帧,然后使用配料
属性列出配料(或者作为对象数组,或者仅使用配料名称作为关键帧)。但您可以选择不使用配料
属性,而是让鸡尾酒对象直接包含配料,例如:
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
根据您想要访问对象图的方式和您的个人风格,有许多不同的方法可以构造生成的对象图
组成部分包括:
var obj = {};
obj.propertyName = value;
obj["propertyName"] = value;
// or
var s = "propertyName";
obj[s] = value;
// or even
var s1 = "property", s2 = "Name";
obj[s1 + s2] = value;
在您的情况下,可以从XMLnodeName
或nodeValue
获取属性名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"
var x = $.parseXML(xml_str);
var obj = {};
$(x).find("*").each(function(){
obj[this.nodeName] = $(this).text;
});
然后,您可以使用obj[“鸡尾酒列表”][“鸡尾”][“名字”]来操作obj是一个json对象
我没有考虑数组。对于像cock_tail这样的数组,您需要检查它是否已经在obj中,如果是,则将其推入。使用jquery.parseXML
var x = $.parseXML(xml_str);
var obj = {};
$(x).find("*").each(function(){
obj[this.nodeName] = $(this).text;
});
然后,您可以使用obj[“鸡尾酒列表”][“鸡尾”][“名字”]来操作obj是一个json对象
我没有考虑数组。对于像cock_tail这样的数组,您需要检查它是否已经在obj中,如果是,则将其推入。JavaScript没有关联数组,它是可以用作关联数组的对象。@stivio:JavaScript对象是关联数组(与“可以用作”相反):-)@T.J.Crowder我认为JavaScript对象不仅仅是关联数组,因为它们可以声明为对象文字,也可以声明为函数,它们还包含其他函数。可以使用构造函数创建对象。我遗漏了什么?@stivlo:它们是以原型层次结构排列的关联数组,可以通过多种方式创建(文字或通过调用构造函数)