继续昨天的PHP多维数组转换成XML数据格式的问题
帖子链接: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的就漏掉了。
输出结果变成:
user001 pass001 1 0101
abc sina.com 1.1.1.1 1 order>info@xxx.com
那个转换的函数,我改了又改,还是一直无法输出完整的数据,头疼……
求各位前辈有什么好的方法?
回复讨论(解决方案)
你那个数组是不存在的,同一维数组里面不可能出现两个一样的键名。
你那个数组是不存在的,同一维数组里面不可能出现两个一样的键名。
但是对方要求我的post过去的xml数据格式是这样的,我想不出别的办法了。
user001 pass001 1 0101
abc baidu.com 1.2.3.4 sina.com 1.1.1.1 1 order>info@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