【问题标题】:Sorting XML data in PHP4在 PHP4 中对 XML 数据进行排序
【发布时间】:2009-11-19 07:39:02
【问题描述】:

您好,我有以下 XML 代码:

<?xml version="1.0" encoding="UTF-8"?>
<connector_ret>
   <function name="search">
     <row id="1">
         <col id="1">AAA</col>
         <col id="2">243168</col>
         <col id="3">090828-000300</col>
         <col id="4">Subject</col>
     </row>
     <row id="2">
         <col id="1">BBB</col>
         <col id="2">243515</col>
         <col id="3">090831-000116</col>
         <col id="4">Subject</col>
     </row>
     <row id="3">
         <col id="1">BBB</col>
         <col id="2">244913</col>
         <col id="3">090905-000022</col>
         <col id="4">Subject</col>
     </row>
     <row id="4">
         <col id="1">CCC</col>
         <col id="2">245323</col>
         <col id="3">090907-000253</col>
         <col id="4">Subject</col>
     </row>
     <row id="5">
         <col id="1">CCC</col>
         <col id="2">245323</col>
         <col id="3">090907-000253</col>
         <col id="4">Subject</col>
     </row>
   </function>
</connector_ret>

我想知道是否可以在 PHP4 中循环并仅在给定变量时显示某些行。

例如,如果给定的变量是 BBB,则只显示第一列 id 也等于 BBB 的行。

所以输出将是:

BBB - 243515 - 090831-000116 - 主题 BBB - 244913 - 090905-000022 - 主题

其他行将被忽略。

如果给定的变量是 AAA,则输出为:

AAA - 243168 - 090828-000300 - 主题

你明白了:)

如果您能提供帮助,那就太好了。非常感谢。

【问题讨论】:

  • @Pete: 说一句 PHP4 已经死了,所以你应该考虑升级
  • 相信我,它会让事情变得更容易,但试图让 IT 在工作中切换到 5 几乎是不可能的。
  • @Pete:我的情况差不多,我已经在网络服务器上安装了 PHP5/PHP4,所以至少每个新东西都在 PHP5 中。如果你不开始,你就无法迁移问题;-)

标签: php xml php4


【解决方案1】:

你应该使用xpath来做这样的处理

$dom    =domxml_open_mem($xml); 
$calcX = &$dom->xpath_new_context();
$xml_parsed["match"]= node_content(
   $calcX->xpath_eval("//row/col[@id=1][text()='BBB']")
);

【讨论】:

  • 这有什么先决条件吗?我感觉 IT 已经禁用了所需的模块,因为 PHP 在运行 domxml_open_mem 函数时出现问题。
  • 是的,domxml 是一个 PECL 扩展,但在大多数现代发行版(Ubuntu、debian、centos)上,您可以安装一个包,请参阅php.net/manual/en/domxml.installation.php 进行 PHP 安装
  • 谢谢。有什么开箱即用的解决方案吗?恐怕试图让 IT 添加任何附加扩展可能会有问题。如果不是,我想这是我能做到的唯一方法。再次感谢!
  • 这不是唯一的方法,但是在对 XML/HTML 进行一些 reg exp 解析之后是邪恶的,所以你最好让你的 sysroot 移动。
  • 感谢愤怒。我一定会努力推动前进。感谢您的所有帮助!
【解决方案2】:

您可能会将 XSL-T 视为解决此问题的方法。选择所需的节点并转换结果很容易。

【讨论】:

  • 问题是 XML 是通过第三方 API 生成的,因此我只能使用我拥有的 XML 输出。
  • @Bernard:XSL-T 仅在 PHP5 中开箱即用,而对于做这些事情,简单的Xpath 就足够了恕我直言
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 2014-04-01
  • 1970-01-01
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多