【问题标题】:How to put XML values of child nodes into an array and return this array?如何将子节点的 XML 值放入数组并返回该数组?
【发布时间】:2019-07-22 11:12:30
【问题描述】:

我有一个 XML 并且只想从特定的子节点读取值。然后我想把这些读取的值放入一个数组中,最后返回这个数组。所以我想获取保存在数组中的所有名称值并返回这个数组。最后,我想在一个 HTML 文件中显示这个数组的所有值。

这是我目前的想法(显然行不通):

$items= simplexml_load_file('https://example.com/xml');
$itemList = array();
foreach ($items as $item->name) {
   // Push the values of name of the item nodes into an array
}
return $itemList;

XML 文件的结构如下:

<item>
   <name>Name 1</name>
</item>
<item>
   <name>Name 2</name>
</item>
<item>
   <name>Name 3</name>
</item>
<item>
   <name>Name 4</name>
</item>

【问题讨论】:

  • 请通过描述它如何不起作用来完成您的问题。你在展示什么吗?没有什么?错误?警告?通知?
  • 已编辑。我想在 HTML 文件中显示值。但最后,这是一个解析器,这就是我必须返回的原因。
  • 如果我的解决方案不起作用,请告诉我,以便我进行调整。
  • 如果可以只返回名称 1、名称 2 等值,那就太好了。
  • 那么就echo impode("&lt;br&gt;", $names);吧。这是超级基础的编程。

标签: php xml simplexml


【解决方案1】:

遍历每个项目并将其作为name 属性。将name 属性显式转换为string,因为默认情况下$item-&gt;name 不是 字符串:

foreach ($items as $item) {
   $itemList[] = (string)$item->name;
}

【讨论】:

  • 我如何返回这个数组或这个数组的值?当我返回 $itemList 时,什么都不会显示。是的,我必须这样做,因为它必须在特定的解析器(Statamic)中工作。
  • “返回”是什么意思?你当然可以简单地return $itemList。如果您需要与不同的语言或系统进行数据交换,您可能希望将此数组转换为 JSON 字符串:echo json_encode($itemList);?
  • return 通常在 function 中使用。我在您的代码中看不到功能。如果有函数 - 只需使用 return $itemList; 作为函数的最后一行。
【解决方案2】:

您需要更改foreach() 代码并在其中进行赋值:-

$itemList = array();
foreach ($items as $item) { //$item->name will not work here
   $itemList[] = $item->name;
}

【讨论】:

    【解决方案3】:

    您可以使用json_encode()json_decode() 将xml 数据转换为字符串数据类型。之后,你想使用哪个标签,你可以在foreach()循环中使用这个标签。之后,您应该创建一个空数组并将所有字符串数据插入到空数组中。

        $items = simplexml_load_file('https://example.com/xml');
        $json = json_encode($items);
        $array = json_decode($json,TRUE);
    
        $names = array();
        foreach ($array["item"] as $key => $value) {
          $names[] = $value["name"];
        }
    
    
        print_r($names);
    

    结果:

      Array
    (
        [0] => Name 1
        [1] => Name 2
        [2] => Name 3
        [3] => Name 4
    )
    

    【讨论】:

      【解决方案4】:

      我没有做很多 xml 处理,所以我用你的示例 xml 尝试了之前发布的答案(以及我发布后的答案),但它们对我不起作用。

      我设法通过在解析之前将您的 xml 写入父元素内部来处理您的数据,然后循环并将名称转换为字符串。

      代码:(Demo)

      $xml = <<<XML
      <item>
         <name>Name 1</name>
      </item>
      <item>
         <name>Name 2</name>
      </item>
      <item>
         <name>Name 3</name>
      </item>
      <item>
         <name>Name 4</name>
      </item>
      XML;
      foreach (simplexml_load_string("<root>{$xml}</root>")->item as $item) {
         $names[] = (string)$item->name;
      }
      var_export($names);
      

      输出:

      array (
        0 => 'Name 1',
        1 => 'Name 2',
        2 => 'Name 3',
        3 => 'Name 4',
      )
      

      【讨论】:

        猜你喜欢
        • 2015-06-10
        • 1970-01-01
        • 2011-05-29
        • 1970-01-01
        • 2013-01-09
        • 2013-12-24
        • 1970-01-01
        • 1970-01-01
        • 2012-09-25
        相关资源
        最近更新 更多