php - 将 XML 数组输出为纯 XML

标签 php

我有一个脚本,它使用 CURL 收集 4 个 URL (XML),并返回一个包含 4 个项目的数组,每个项目包含 URL 的结果。

这是数组:

array(3) {
  [0]=>
  string(41772) "<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array">
<status>
  <created_at>Tue Mar 30 20:58:53 +0000 2010</created_at>
  <id>11328253513</id>
  <text>...</text>
  <source...</source>
  <truncated>false</truncated>
  <in_reply_to_status_id></in_reply_to_status_id>
  <in_reply_to_user_id></in_reply_to_user_id>
  <favorited>true</favorited>
  <in_reply_to_screen_name></in_reply_to_screen_name>
  <user>
    <id>1...</id>
    <name>....</name>
</status>
</statuses>
"
  [1]=>
  string(20630) "<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array">
<status>
  <created_at>Sun Feb 28 14:12:30 +0000 2010</created_at>
  <id>...</id>
  <text>...</text>
  <source>&lt;a

etc...

如何轻松地从数组中输出 XML?我还需要将 3 个 XML 结构合并为一个,其中 <statuses>在每个数组之间开始和结束。

最佳答案

一个可能的想法是:

  • 创建一个新的$destination DOMDocument 的实例
    • 使用 <statuses> 对其进行初始化节点
  • 对于 3 个 XML 字符串中的每一个:
    • 将其加载到 DOMDocument 的另一个实例:$currentDocument
    • 找到<status>节点,带有 $currentDocument->getElementsByTagName或等效的
    • 导入 <status>您刚刚找到的节点到 $destination文档,带有 $destination->importNode
  • 当每个 XML 字符串的循环完成后,$destination文档应该包含您想要的内容,您可以使用 $destination->saveXML 保存它。


这是一个快速的代码示例,可以帮助您理解我的意思:

首先,这是 XML 字符串数组 - 我已将它们变得更短,但其想法与您所拥有的相同:

$strings = array(
  '<?xml version="1.0" encoding="UTF-8"?>
    <statuses type="array"><status>
      <id>ID 1</id>
    </status></statuses>',
  '<?xml version="1.0" encoding="UTF-8"?>
    <statuses type="array"><status>
      <id>ID 2</id>
    </status></statuses>',
  '<?xml version="1.0" encoding="UTF-8"?>
    <statuses type="array"><status>
      <id>ID 3</id>
    </status></statuses>',
);


让我们创建目标文档,并放置 <statuses>其中的标签:

$destination = new DOMDocument();
$destination->formatOutput = true;
$destinationStatuses = $destination->createElement('statuses');
$destination->appendChild($destinationStatuses);


现在,我们循环 3 个 XML 字符串:

foreach ($strings as $str) {
  $current = new DOMDocument();
  $current->loadXML($str);
  $currentStatuses = $current->getElementsByTagName('status');
  foreach ($currentStatuses as $currentStatus) {
    $destinationStatus = $destination->importNode($currentStatus, true);
    $destinationStatuses->appendChild($destinationStatus);
  }
}


对于每个字符串,我们:

  • 将其加载到新的 DOMDocument
  • 查找<status>标签
  • 对于每个<status>标签,将其导入到目标文档
  • 并将其添加到其 <statuses> 中标签


最后,如果我们输出新文档的内容:

echo '<pre>' . htmlspecialchars($destination->saveXML()) . '</pre>';


我们得到:

<?xml version="1.0"?>
<statuses>
  <status>
      <id>ID 1</id>
    </status>
  <status>
      <id>ID 2</id>
    </status>
  <status>
      <id>ID 3</id>
    </status>
</statuses>

即我们三个<status>三个原始字符串已合并到一个 XML 文档中;-)

关于php - 将 XML 数组输出为纯 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2554671/

相关文章:

java - 当 jsonResponse 从 mySQL-DB 获取空数据时没有任何反应

javascript - 如何使用 AJAX 和 PHP 更新网页

php - 如何在 PHP 中将变量重置为 NULL?

javascript - 使用ajax动态调用PHP函数

php - 根据 id 与条件匹配更新一个 MySQL 表值

php - 如何将带有参数的 URI 路由到 codeigniter 中的方法?

php - mysql按周分组

php - MySQL:csv 中的 INTO OUTFILE 生成无效的 csv 格式

php - Drupal 8 - 图像样式未在第一页加载时显示

php - 来自 PHP 查询的 MySQL 查询