• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP的xml字符串解析(在线求解)

php 搞代码 4年前 (2022-01-23) 16次浏览 已收录 0个评论
文章目录[隐藏]

小弟接触php时间不长,今天遇到个问题就是解析xml字符串,内容是

<?xml version='1.0' encoding='utf-8'?>1381796968813817969688021-54485454刘先生上海长宁新中路999号4栋8楼</address>送货前电话联系,谢谢。515411515423

$xml=simplexml_load_string($xmlStr);foreach($xml->order_info as $item) {	oreach($item as $k=>$v)	echo "$k $v\n";}

代码是网上找的,但用到我的这个上面行不通,我试了一下,一方面是因为字符串有汉字,另一方面是xml结构跟网上提供的示例不一样,请问亲们这个要怎么解析呢

回复讨论(解决方案)

 header('Content-Type: text/xml');

加上这行代码试试

1、simplexml 会忽略根节点
对于你的示例数据,根节点 order_info 被忽略,所以 $xml->order_info 不存在,所以你不会有输出
打印一级子节点的值应这样写

foreach($xml->children() as $k=>$v) {  if(empty($v)) //这里检查是否有子节点,如有就不打印。这样就跳过了 goods_infos    echo "$k $v\n";}

2、如果是打印 goods_infos 下的 good 子节点,则写作

foreach($xml->goods_infos->good as $item) {  foreach($item as $k=>$v)    echo "$k $v\n";}

3、如果你的程序文件不是 utf-8 的,还应该有
$xmlStr = str_replace(“encoding=’utf-8′”, “encoding=’gbk'”, $xmlStr);
即将字符集改为真实的字符集
当然打印的结果仍然是 utf-8 的

如果需要遍历所有节点,那么就需要递归

function show_child($xml) {  foreach($xml->children() as $tag=>$item) {    if($item) show_child($item);    else echo "$tag: $item\n";  }}show_child($xml);

user_name: 13817969688
mobile: 13817969688
tel: 021-54485454
customer_name: 刘先生
city_name: 上海
district_name: 长宁
address: 新中路999号4栋8楼
customer_word: 送货前电话联系,谢谢。
goods_id: 51541
goods_amount: 1
goods_id: 51542
goods_amount: 3

1、simplexml 会忽略根节点
对于你的示例数据,根节点 order_info 被忽略,所以 $xml->order_info 不存在,所以你不会有输出
打印一级子节点的值应这样写

foreach($xml->children() as $k=>$v) {  if(empty($v)) //这里检查是否有子节点,如有就不打印。这样就跳过了 goods_infos    echo "<strong style="color:transparent">本&文来源gao@daima#com搞(%代@#码网@</strong><textarea>搞gaodaima代码</textarea>$k $v\n";}

2、如果是打印 goods_infos 下的 good 子节点,则写作

foreach($xml->goods_infos->good as $item) {  foreach($item as $k=>$v)    echo "$k $v\n";}

3、如果你的程序文件不是 utf-8 的,还应该有
$xmlStr = str_replace(“encoding=’utf-8′”, “encoding=’gbk'”, $xmlStr);
即将字符集改为真实的字符集
当然打印的结果仍然是 utf-8 的
非常感谢你的详细解答,但现在遇到个问题是,我的xml文件在simplexml_load_string处理之前是正常的,但处理之后输出发现乱码了,而且转码好像转不过来,我的程序文件是gbk的,所以我加过$xmlStr = str_replace(“encoding=’utf-8′”, “encoding=’gbk'”, $xmlStr);了

不是说了吗?
当然打印的结果仍然是 utf-8 的
因为 utf-8 是 xml 的工作语言
你需要逐个的对待打印的数据进行转码
比如 echo iconv(‘utf-6’, ‘gbk’, $v);


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP的xml字符串解析(在线求解)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址