2

这是我的 xml 文件:

<?xml version="1.0" encoding="utf-8" ?> 
<documentElement>
    <rows>
        <row>
            <column>1</column>
            <column>David</column>
            <column>Johnson</column>
        </row>
        <row>
            <column>2</column>
            <column>Jack</column>
            <column>Nixon</column>
        </row>
    </rows>
</documentElement>

我想遍历行并将它们添加到数组中。我将它传递给simplexml然后循环遍历这些对象,但不能这样做:

$xml->rows
$xml->rows->row
$xml->row
$xml->column

我该怎么办?

谢谢。

4

5 回答 5

6

这实际上是更基本的示例之一:

$sxml = simplexml_load_string($xml);

foreach($sxml->rows->row as $name => $row)
{
    echo $name, ': ', var_dump($row);
}

这将为您提供以下输出:

row: object(SimpleXMLElement)#3 (1) {
  ["column"]=>
  array(3) {
    [0]=>
    string(1) "1"
    [1]=>
    string(5) "David"
    [2]=>
    string(7) "Johnson"
  }
}
row: object(SimpleXMLElement)#5 (1) {
  ["column"]=>
  array(3) {
    [0]=>
    string(1) "2"
    [1]=>
    string(4) "Jack"
    [2]=>
    string(5) "Nixon"
  }

您可以在这里找到在线演示:http: //codepad.org/CYyQhvnM

您实际上应该看一下手册中的简单示例部分,它有一些非常有见地的示例,这些示例比我的解释更深入:

无论如何,我希望答案是有帮助的。相关问题是:

于 2012-08-28T07:42:29.220 回答
4

如果您更习惯于数组,您还可以将简单的 xml 翻转为数组:s

<?php
$xml = simplexml_load_file('./your.xml');
$json = json_encode($xml);
$array = json_decode($json,TRUE);
print_r($array);
/**
 *Array
(
    [rows] => Array
        (
            [row] => Array
                (
                    [0] => Array
                        (
                            [column] => Array
                                (
                                    [0] => 1
                                    [1] => David
                                    [2] => Johnson
                                )

                        )

                    [1] => Array
                        (
                            [column] => Array
                                (
                                    [0] => 2
                                    [1] => Jack
                                    [2] => Nixon
                                )

                        )

                )

        )

)
 */

foreach($array['rows']['row'] as $row){
    echo 'Id:'.$row['column'][0],
         ' Firstname:'.$row['column'][1],
         ' Lastname:'.$row['column'][2].'<br />'.PHP_EOL;
}

/*Result
Id:1 Firstname:David Lastname:Johnson<br />
Id:2 Firstname:Jack Lastname:Nixon<br />
*/
?>

或者 hakra 的一个更干净的例子

<?php
$xml = simplexml_load_file('./test.xml');
$rows = json_decode(json_encode(iterator_to_array($xml->rows->row, 0)), 1);
print_r($rows);
/**
 *
Array
(
    [0] => Array
        (
            [column] => Array
                (
                    [0] => 1
                    [1] => David
                    [2] => Johnson
                )

        )

    [1] => Array
        (
            [column] => Array
                (
                    [0] => 2
                    [1] => Jack
                    [2] => Nixon
                )

        )

)
 */

foreach($rows as $row){
    echo 'Id:'.$row['column'][0],
         ' Firstname:'.$row['column'][1],
         ' Lastname:'.$row['column'][2].'<br />'.PHP_EOL;
}
于 2012-08-28T07:45:08.907 回答
0

尝试$xml->rows[0]->row[0]

于 2012-08-28T07:38:08.040 回答
0

如果您只是想遍历行:

<?php

$xmlstr = <<<XML
<?xml version="1.0" encoding="utf-8" ?> 
<documentElement>
    <rows>
        <row>
            <column>1</column>
            <column>David</column>
            <column>Johnson</column>
        </row>
        <row>
            <column>2</column>
            <column>Jack</column>
            <column>Nixon</column>
        </row> 
    </rows>
</documentElement>
XML;

$element = new SimpleXMLElement($xmlstr);

foreach($element->rows->row as $row) {

    foreach($row as $column) {
        echo "{$column}<br>";                
    }

    echo "<hr>";
}

?>
于 2012-08-28T07:47:32.180 回答
0
$sxml = simplexml_load_string($xml);
$newArray = array();
foreach($sxml->rows as $num => $row){
    foreach($row as $el){
        (array)$newArray[] = (array)$el;
    }
}

var_dump($newArray);
于 2012-08-28T07:48:31.620 回答