php 多维数组生成xml,继续昨天的PHP多维数组转换成XML数据格式的问题

博客作者在尝试将PHP数组转换为XML时遇到了问题,由于数组中存在相同键名导致XML生成时丢失数据。经过讨论,发现是创建PHP数组时定义了重复的键值,从而导致转换错误。最终,作者采用了先定义XML模板,然后替换变量的方式解决了问题。
摘要由CSDN通过智能技术生成

首先要感谢昨天的两位朋友:jordan102和xuzuning

帖子链接:http://bbs.csdn.net/topics/390609227

他们二位提供的方法测试确实可行,实在。

但是在项目的开发过程中,又发现这个项目太变态了,居然还有这样的情况

PHP数组:

$ar=array( "auth"=> array("user"=> "user001","password"=> "pass001","context"=> "1" ),"task"=> array("code"=>"0101","item"=>array("title"=>"abc","web"=>array("name"=>"baidu.com","ip"=>"1.2.3.4",),"web"=>array("name"=>"sina.com","ip"=>"1.1.1.1",),"confirm order"=>"1",),"reply_to"=>"info@xxx.com",),);

注意看里面的item节点下面,有两个web的子节点,实际上web子节点可能还有好几个,一般是在2-4个左右

现在的转换程序代码如下:

$xml = simplexml_load_string('');create($ar, $xml);$xmlData = $xml->saveXML();echo $xmlData;function create($ar, $xml) {foreach($ar as $k=>$v) {if(is_array($v)) {$x = $xml->addChild($k);create($v, $x);}else $xml->addChild($k, $v);}}

这段代码比较效率比较高,但是在遇到相同名称节点的时候,就过滤了只保留最后一个节点,这样最后输出的结果变成了,注意看,把web的name值为baidu.com的就漏掉了。

输出结果变成:

user001pass00110101abcsina.com1.1.1.11info@xxx.com

那个转换的函数,我改了又改,还是一直无法输出完整的数据,头疼……

求各位前辈有什么好的方法?

回复讨论(解决方案)

你那个数组是不存在的,同一维数组里面不可能出现两个一样的键名。

你那个数组是不存在的,同一维数组里面不可能出现两个一样的键名。

但是对方要求我的post过去的xml数据格式是这样的,我想不出别的办法了。user001pass00110101abcbaidu.com1.2.3.4sina.com1.1.1.11info@xxx.com

问题是入口数据是怎样?文本?json?肯定不是你显示的那个数组

现成的array2xml、json2xml类很多啊

问题是入口数据是怎样?文本?json?肯定不是你显示的那个数组

现成的array2xml、json2xml类很多啊

你说的这两个类我没用过哦,我是刚接触xml

入口数据就是xml格式的,不是json

对方是一个接口接收我post过去的xml格式数据,他们的技术文档我截图了,你看下,就是里面有两个nserver,而且这个技术文档后面,好几处也是这样写的,我觉得应该不是写错了吧

你现在的问题不是数组转换xml的问题,而是在生成那个数组的时候就已经出现了问题。

或者说php中的数组已经无法表示你最原始的数据了(至少目前你采用的这种方式无法表示)

所以请把最原始的数据贴出来,改变它的表示方式,才能解决问题。

你现在的问题不是数组转换xml的问题,而是在生成那个数组的时候就已经出现了问题。

或者说php中的数组已经无法表示你最原始的数据了(至少目前你采用的这种方式无法表示)

所以请把最原始的数据贴出来,改变它的表示方式,才能解决问题。

你说的是真的,我刚刚检查了一下,在将数据转换成xml数据之前,显示数组的各项值时,那个重复了名称的变成了一项。

不是说对方的入口,是你的入口,你的array怎么来的?不可能有相同的key

你这个xml貌似也没有那么复杂啊,不涉及中文及特殊字符的转义问题

如果你不熟悉xml,不如通过 循环拼接字符串的 方式来生成xml,或许更简单一点。

不是说对方的入口,是你的入口,你的array怎么来的?不可能有相同的key

嗯,经过各位前辈的指点,现在明白了,确实是我在创建php数组并且赋值的时候,就已经定义了相同的键值名称,导致数组有问题。

我现在找了一个比较笨的解决方法,就是先定义一个文本变量$xmltext,把对方要求发送的xml数据文本复制进去,再使用替换的文本中的几个变量,替换完了,直接post过去,不需要先定义数组,再转换成xml。

你这个xml貌似也没有那么复杂啊,不涉及中文及特殊字符的转义问题

如果你不熟悉xml,不如通过 循环拼接字符串的 方式来生成xml,或许更简单一点。

是的,我现在就是用了这种方法

不是说对方的入口,是你的入口,你的array怎么来的?不可能有相同的key

嗯,经过各位前辈的指点,现在明白了,确实是我在创建php数组并且赋值的时候,就已经定义了相同的键值名称,导致数组有问题。

我现在找了一个比较笨的解决方法,就是先定义一个文本变量$xmltext,把对方要求发送的xml数据文本复制进去,再使用替换的文本中的几个变量,替换完了,直接post过去,不需要先定义数组,再转换成xml。

这个也不算笨,其实就是php模板的做法,别忘了输出 header->text/xml

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值