您要做的是创建一个对象图,您可以通过递归遍历 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
有很多不同的方法可以构建生成的对象图,具体取决于您想要访问它的方式和您的个人风格。
组成部分是:
创建一个对象。这很容易:
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,那么您应该可以继续根据遍历结果构建对象图。我没有编写实际的代码来执行此操作,因为同样,在您希望如何构建对象图方面需要做出许多决定,这完全取决于您想要如何做。