Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XML数据到关联数组_Javascript_Xml_Arrays_Object_Associative - Fatal编程技术网

Javascript 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数据:

<?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;
    
    在您的情况下,可以从XML
    nodeName
    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;
    
    在您的情况下,可以从XML
    nodeName
    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,因此应该可以根据遍历的结果继续构建对象图。我并没有编写实际的代码来实现这一点,因为在如何构造对象图方面,还有许多决策需要做出,而这些决策完全取决于您想要如何进行。

    使用jquery.parseXML

    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:它们是以原型层次结构排列的关联数组,可以通过多种方式创建(文字或通过调用构造函数)