【问题标题】:Only return first element of array when using simplexml_load_string使用 simplexml_load_string 时仅返回数组的第一个元素
【发布时间】:2014-07-28 17:30:50
【问题描述】:

我阅读了以下 xml 文件:

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
   <books uiTotalCount="45"  uiTotalPages="2"  >
    <book title="Book1">
     <registrationNumber formatCode="raw">BO1</registrationNumber>
    </book>
    <book title="Book2">
     <registrationNumber formatCode="raw">BO2</registrationNumber>
    </book>
   </books>

使用以下代码时:

$xmlResponse = file_get_contents('\xml\books.xml', true); xml = simplexml_load_string($xmlResponse); var_dump($xml->book);

最后一行只给出第一个元素:

object(SimpleXMLElement)[3]
public '@attributes' => 
array (size=1)
'title' => string 'Book1' (length=5)
public 'registrationNumber' => string 'BO1' (length=3)`

当我查看 var_dump($xml) 时,我可以看到 2 本书:

object(SimpleXMLElement)[2]
  public '@attributes' => 
    array (size=2)
      'uiTotalCount' => string '45' (length=2)
      'uiTotalPages' => string '2' (length=1)
  public 'book' => 
    array (size=2)
      0 => 
        object(SimpleXMLElement)[3]
          public '@attributes' => 
            array (size=1)
              ...
          public 'registrationNumber' => string 'BO1' (length=3)
      1 => 
        object(SimpleXMLElement)[4]
          public '@attributes' => 
            array (size=1)
              ...
          public 'registrationNumber' => string 'BO2' (length=3)

有人知道我做错了什么吗?我想获得所有书籍的完整数组,以便我可以对其进行 jsonify。

【问题讨论】:

    标签: php arrays xml


    【解决方案1】:

    使用foreach 循环。

    在循环中,您可以提取每个book 节点的单个属性子节点,并使用它们来组装数组。这是一个基于您的代码的快速示例:

    $xmlResponse = file_get_contents('\xml\books.xml', true);
    $xml = simplexml_load_string($xmlResponse);
    
    echo "books: [\n";
    $count = 0;
    foreach($xml->book as $book) {
        echo "  {\n";
        echo '    "title": "'.$book['title'].'"'.",\n";
        echo '    "registration-number": "'.$book->registrationNumber.'"'."\n";
        echo "  },\n";
    }
    echo "]\n";
    

    哪个打印:

    books: [
      {
        "title": "Book1",
        "registration-number": "BO1"
      },
      {
        "title": "Book2",
        "registration-number": "BO2"
      },
    ]
    

    PHP Fiddle

    (也可以快速查看this tutorial 以获得更多想法)。

    【讨论】:

      【解决方案2】:

      通过完整的xml编写循环并将XML书籍对象存储在数组中是否是一种解决方案?

      【讨论】:

        猜你喜欢
        • 2014-12-31
        • 2017-03-29
        • 1970-01-01
        • 2011-07-12
        • 2015-04-22
        • 2020-09-20
        • 1970-01-01
        • 1970-01-01
        • 2016-10-31
        相关资源
        最近更新 更多