【问题标题】:converting xml data to array in cakephp在cakephp中将xml数据转换为数组
【发布时间】:2012-07-07 15:34:32
【问题描述】:

我正在使用 cakephp 的预定义函数 XML 组件。我想要做的是,将 xml 文件数据转换为数组以进行处理。为此我的代码是这样的:

App::import('Helper', 'Xml');
$xml = new XmlHelper();
$xml_data = & new XML($filePath);
$array = Set::reverse($xml_data);

如果我的 xml 文件包含以下格式的数据,则此代码可以完美运行:

<parent>
  <tag ...../>
  <tag ...../>
</parent>

根节点在哪里。

即所有标签都在一个父标签内。

但是当数据分布在几个不同的父标签中时会出现问题,即:

<parent>
  <tag ...../>
</parent>
<parent>
  <tag ...../>
</parent>

在这种情况下,只有第一个父标签的数据会在输出数组中给出。 我知道 xml 文件应该只有 1 个根节点,但问题是当我读取 xml 文件时,有时我会得到具有多个根节点的文件。 我只想知道有没有办法读取具有多个根节点的xml文件。

这是我可以在 xml 文件中读取多个父标签的任何其他方式吗

【问题讨论】:

  • 为什么这被否决了?这是一个合理的问题,即使它缺乏一些可能有帮助的信息。投反对票的人,至少要解释为什么你投反对票,这样提出问题的人至少在理论上可以从经验中学到一些东西。
  • @HelgiHrafnGunnarsson:谢谢。

标签: php xml cakephp cakephp-1.3


【解决方案1】:

这些父元素是 XML 文档的根吗?这很重要,因为 XML 只允许一个根节点。在根节点下,您可以拥有任意数量的元素。从您的问题中不清楚 是根节点还是根节点的子节点。

但是您尝试做的事情也可能是个坏主意,除非您可以确定 XML 文件将永远保持非常小。 PHP 中的大而深的数组很快就会变得非常慢。让我建议改为学习 XPath,它是一种用于在 XML 文档中搜索内容的“子语言”。 XML 处理通常会变得有些缓慢和繁重,但无论您如何处理它们,大而深的 PHP 数组都会变得非常缓慢。

希望对你有帮助!

【讨论】:

  • 我不知道有任何工具可以让您读取多个根节点。 - 如果您获得具有多个根节点的 XML 文件,它们本质上是有缺陷的。处理这个问题的正确方法是通知那些给你这些 XML 文件的人,告诉他们它们需要是有效的 XML。我能想到的唯一替代解决方案是使用一些定制的实用程序手动拆分它们,然后读取多个文件。但它们实际上应该只是有效的 XML。
  • 还请注意,即使您在这种情况下使用它,大多数其他 XML 解析器也会因多个根节点而失败。这首先违背了使用 XML 的目的。这一点我怎么强调都不为过;那些给你这些文件的人应该有责任给你有效的 XML。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 2016-12-05
相关资源
最近更新 更多