如何循环遍历 XML 文件,其中包含 PHP 的重复节点
How do I loop through a XML file with repeating nodes with PHP
我想使用 PHP 从 API 响应循环遍历 XML 文件,创建一个包含 XML 文件夹节点的数组 id
和 name
,对数组内容进行降序排序(按 id),echo/return name
内容。
XML内容:
<?xml version="1.0"?>
<success>
<document>
<folder>
<id>295</id>
<name>My Folder</name>
<parent>
<folder>
<id>83</id>
<name>Contents</name>
<parent>
<folder>
<id>45</id>
<name>Sub Folder</name>
<parent>
<folder>
<id>21</id>
<name>Root Folder</name>
</folder>
</parent>
</folder>
</parent>
</folder>
</parent>
</folder>
</document>
</success>
我自己用 SimpleXML 尝试了一些东西,但一直卡住,因为 XML 输出有这些嵌套的 <parent>
节点,我不确定如何处理这些,以只需获取 id
和 name
节点。
这是我目前的 PHP 部分:
<?php
if (file_exists('api_results.xml')) {
$xml = simplexml_load_string('api_results.xml');
foreach($xml->document->folder as $folder)
{
$folders = array();
foreach($folder as $key => $value)
{
$folder[(string)$key] = (string)$value;
}
$folders[] = $folder;
}
print_r($folders);
} else {
exit('Failed to open api_results.xml.');
}
如何创建一个数组并添加每个 id/name 节点然后对数组内容进行排序?
您可以使用 XPath,它允许您搜索 <folder>
节点的列表。使用 //folder
将在文档的所有级别进行搜索,让您不必担心嵌套的 foreach
循环。
然后您可以使用 $folder->id
获取每个 <folder>
中的 <id>
元素。
一件事是您应该使用 simplexml_load_file()
从文件加载数据,字符串版本旨在从字符串加载。
$xml = simplexml_load_file('api_results.xml');
$folders = [];
foreach ($xml->xpath('//folder') as $folder) {
$folders[] = [(string)$folder->id, (string)$folder->name];
}
print_r($folders);
您的测试文档给出了...
Array
(
[0] => Array
(
[0] => 295
[1] => My Folder
)
[1] => Array
(
[0] => 83
[1] => Contents
)
[2] => Array
(
[0] => 45
[1] => Sub Folder
)
[3] => Array
(
[0] => 21
[1] => Root Folder
)
)
我想使用 PHP 从 API 响应循环遍历 XML 文件,创建一个包含 XML 文件夹节点的数组 id
和 name
,对数组内容进行降序排序(按 id),echo/return name
内容。
XML内容:
<?xml version="1.0"?>
<success>
<document>
<folder>
<id>295</id>
<name>My Folder</name>
<parent>
<folder>
<id>83</id>
<name>Contents</name>
<parent>
<folder>
<id>45</id>
<name>Sub Folder</name>
<parent>
<folder>
<id>21</id>
<name>Root Folder</name>
</folder>
</parent>
</folder>
</parent>
</folder>
</parent>
</folder>
</document>
</success>
我自己用 SimpleXML 尝试了一些东西,但一直卡住,因为 XML 输出有这些嵌套的 <parent>
节点,我不确定如何处理这些,以只需获取 id
和 name
节点。
这是我目前的 PHP 部分:
<?php
if (file_exists('api_results.xml')) {
$xml = simplexml_load_string('api_results.xml');
foreach($xml->document->folder as $folder)
{
$folders = array();
foreach($folder as $key => $value)
{
$folder[(string)$key] = (string)$value;
}
$folders[] = $folder;
}
print_r($folders);
} else {
exit('Failed to open api_results.xml.');
}
如何创建一个数组并添加每个 id/name 节点然后对数组内容进行排序?
您可以使用 XPath,它允许您搜索 <folder>
节点的列表。使用 //folder
将在文档的所有级别进行搜索,让您不必担心嵌套的 foreach
循环。
然后您可以使用 $folder->id
获取每个 <folder>
中的 <id>
元素。
一件事是您应该使用 simplexml_load_file()
从文件加载数据,字符串版本旨在从字符串加载。
$xml = simplexml_load_file('api_results.xml');
$folders = [];
foreach ($xml->xpath('//folder') as $folder) {
$folders[] = [(string)$folder->id, (string)$folder->name];
}
print_r($folders);
您的测试文档给出了...
Array
(
[0] => Array
(
[0] => 295
[1] => My Folder
)
[1] => Array
(
[0] => 83
[1] => Contents
)
[2] => Array
(
[0] => 45
[1] => Sub Folder
)
[3] => Array
(
[0] => 21
[1] => Root Folder
)
)