将xml之后的元素转换为数组

时间:2017-07-03 13:59:28

标签: php xml

我有一个包含产品的XML,我使用此函数将其从XML转换为Array http://www.bin-co.com/php/scripts/xml2array/ 当我在XML文件中只有一个属性而我试图将第一个数组转换为多维时,我遇到了问题。

[attributes] => Array
    (
        [attribute] => Array
            (
                [name] => 44
                [quantity] => 1
                [availability] => 1
            )

    )

    [attributes] => Array
        (
            [attribute] => Array
                (
                    [0] => Array
                        (
                            [name] => 40
                            [quantity] => 1
                            [availability] => 1
                        )
                )
        )

我需要一个循环的多维数组

foreach($products["attributes"]["attribute"] as $attr) {
    echo $attr["name"]
}

XML

<?xml version="1.0" encoding="UTF-8"?>
<products>
    <product>
        <id>1006</id>
        <sku>360116 05</sku>
        <attributes>
            <attribute>
                <name>44</name>
                <quantity>1</quantity>
                <availability>1</availability>
            </attribute>
        </attributes>
    </product>
    <product>
        <id>2501</id>
        <sku>AQ4040</sku>
        <attributes>
            <attribute>
                <name>42.5</name>
                <quantity>13</quantity>
                <availability>2</availability>
            </attribute>
            <attribute>
                <name>44</name>
                <quantity>18</quantity>
                <availability>2</availability>
            </attribute>
        </attributes>
    </product>
</products>

3 个答案:

答案 0 :(得分:0)

可能你从这里得到一些解决方案http://us1.php.net/xml_parse_into_struct没试过,但希望它会有所帮助。请参阅示例#3 parsemoldb.php,类似于您的函数文件。

答案 1 :(得分:0)

如果你需要了解这种结构中的项目,使用SimpleXML可能更简单。以下代码非常简单地访问数据。

<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );

$xmlText = <<< XML
<?xml version="1.0" encoding="UTF-8"?>
<products>
    <product>
        <id>1006</id>
        <sku>360116 05</sku>
        <attributes>
            <attribute>
                <name>44</name>
                <quantity>1</quantity>
                <availability>1</availability>
            </attribute>
        </attributes>
    </product>
    <product>
        <id>2501</id>
        <sku>AQ4040</sku>
        <attributes>
            <attribute>
                <name>42.5</name>
                <quantity>13</quantity>
                <availability>2</availability>
            </attribute>
            <attribute>
                <name>44</name>
                <quantity>18</quantity>
                <availability>2</availability>
            </attribute>
        </attributes>
    </product>
</products>
XML;

$doc = simplexml_load_string($xmlText);

foreach ( $doc->product as $product)   {
   echo "Product id=".$product->id.",";
   foreach ( $product->attributes->attribute as $attribute){
       echo "name:".$attribute->name.",";
   }
   echo "\n";
}

echo "Complete";

其输出是......

Product id=1006,name:44,
Product id=2501,name:42.5,name:44,
Complete

使用simple_xml_加载时,您可以访问子元素,就好像它们是上面元素的属性一样,因此$product->attributes->attribute使用每个产品,然后选择属性元素,然后选择其中的每个属性元素。 要从文件加载,请使用simplexml_load_file()。

答案 2 :(得分:0)

我认为这是你可能正在寻找的东西:

foreach($products["attributes"] as $product) {
    foreach($product["attribute"] as $attr) {
        echo $attr["name"]
    }
}