PHP - XML到数组

问题描述 投票:0回答:3

我需要将xml转换为数组:

XML

?xml version="1.0" standalone="yes"?>
<DocumentElement>
  <article>
    <a>TEST></a>
    <b>TEST2</b>
    <c>TEST3</c>
  </article>

  <article>
    <a>TEST4></a>
    <b>TEST5</b>
    <c>TEST6</c>
  </article>
</DocumentElement>

我需要一个像这样的数组:

$testArray = array(
        array('a' => TEST, 'b' => 'TEST2', 'c' => TEST3),
        array('a' => TEST4, 'b' => 'TEST5', 'c' => TEST6)
    );

我的第一次尝试是:

$file = "product.xml";
$productArray = @simplexml_load_file($file) or
die ("ERROR loading file");

但是用这种方法我得到一个数组。

有关如何做到这一点的任何建议?

php arrays xml
3个回答
0
投票

如果XML的结构是动态的,则可以创建几个循环,这些循环将提取值以及元素的名称,并将它们逐个添加到结果数组中。

$file = "product.xml";
$productArray = simplexml_load_file($file) or
     die ("ERROR loading file");
$articles = [];
foreach ( $productArray->article as $article )  {
    $newElement = [];
    foreach ( $article as $element )    {
        $newElement [ $element->getName() ] = (string)$element;
    }
    $articles[] = $newElement;
}

print_r($articles);

给...

Array
(
    [0] => Array
        (
            [a] => TEST>
            [b] => TEST2
            [c] => TEST3
        )

    [1] => Array
        (
            [a] => TEST4>
            [b] => TEST5
            [c] => TEST6
        )

)

0
投票

当你这样做

$productArray = @simplexml_load_file($file) or die ("ERROR loading file");

你会得到一个对象。

如果你想循环浏览每篇文章,你可以这样做

foreach($productArray ->children() as $article) { 
    echo $article->a. ", "; 
    echo $article->b. ", "; 
    echo $article->c. ", ";
} 

0
投票

下面的代码将介绍您的问题的XML。

<?PHP
$link = 'yourxmlfile.xml'; //XML link
$xml = simplexml_load_file($link); //load xml


//Loop
foreach($xml -> article as $item){ 
    echo "<strong>A:</strong> ".utf8_decode($item ->a)."<br />";
    echo "<strong>B:</strong> ".utf8_decode($item ->b)."<br />";
    echo "<strong>C:</strong> ".utf8_decode($item ->c)."<br />";
    echo "<br />";
}
© www.soinside.com 2019 - 2024. All rights reserved.