Home > Article > Backend Development > 继续昨天的PHP多维数组转换成XML数据格式的问题
首先要感谢昨天的两位朋友: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", ),);
$xml = simplexml_load_string('<request />');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); }}
<?xml version="1.0"?><request> <auth> <user>user001</user> <password>pass001</password> <context>1</context> </auth> <task> <code>0101</code> <item> <title>abc</title> <web> <name>sina.com</name> <ip>1.1.1.1</ip> </web> <confirm order>1</confirm order> </item> <reply_to>info@xxx.com</reply_to> </task></request>
你那个数组是不存在的,同一维数组里面不可能出现两个一样的键名。
你那个数组是不存在的,同一维数组里面不可能出现两个一样的键名。
但是对方要求我的post过去的xml数据格式是这样的,我想不出别的办法了。
<?xml version="1.0"?><request> <auth> <user>user001</user> <password>pass001</password> <context>1</context> </auth> <task> <code>0101</code> <item> <title>abc</title> <web> <name>baidu.com</name> <ip>1.2.3.4</ip> </web> <web> <name>sina.com</name> <ip>1.1.1.1</ip> </web> <confirm order>1</confirm order> </item> <reply_to>info@xxx.com</reply_to> </task></request>
问题是入口数据是怎样?文本?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