当前位置:Gxlcms > PHP教程 > 请问这个xml怎么用simplexml解析,vardump总是false

请问这个xml怎么用simplexml解析,vardump总是false

时间:2021-07-01 10:21:17 帮助过:17人阅读

版主,又来求助了。。。这回事是网页返回的XML数据,我不知道为什么不能用simplexml读取,var_dump显示false

  1. echo '#########################'.'<br><br>';
  2. var_dump($xml);
  3. echo '#########################';
  4. echo '<br>'.'<br>'.'<br>'.$xml->xsm->nickname;

如果用上面这段直接打印是这样子的:

  1. echo '#########################'.'<br><br>';
  2. var_dump(simplexml_load_string($xml);
  3. echo '#########################';
  4. echo '<br>'.'<br>'.'<br>'.$xml->xsm->nickname;

用这段代码打印就会显示bool(false)
求解决


回复讨论(解决方案)

  1. $xml = preg_replace('/!|--/', '', $xml);var_dump(simplexml_load_string($xml));

  1. $xml = preg_replace('/!|--/', '', $xml);var_dump(simplexml_load_string($xml));


  1. //$xml='<!--?xml version="1.0" encoding="gbk"?-->';
  2. $xml = preg_replace('/!--\?|--/','', $xml);
  3. var_dump($xml);

这样我试了,单独一行可以正匹配,但是在这段代码里无效。在网页元素查看器里看到返回的数值还是有注释符

你为什么要自作聪明呢

  1. $xml = preg_replace('/!|--/', '', $xml);var_dump(simplexml_load_string($xml));


之前我不懂那个是xml里的注释,现在明白了,所以想到了另一种方法,可是还是失败了,能告诉我下原因吗?
  1. $xml = '<xml version="1.0" encoding="gbk" ?="">'.$xml;
  2. var_dump(simplexml_load_string($xml));</xml>

我是用字符串运算符加了一行xml的文件标记,可是用simplexml_load_string的时候依然显示失败

还是那话,你为什么要自作聪明呢

你为什么要自作聪明呢


你给我的代码贴上去也是无法载入...

那是因为你不给我你的数据

还是那话,你为什么要自作聪明呢



这是直接复制给我的代码贴上去运行后的结果...

依然得去掉simplexml载入的语句才能dump出来

你光截图是没有用的!
你怎么知道其中没有不可打印的字符呢?

那是因为你不给我你的数据


  1. <!--?xml version="1.0" encoding="gbk"?--><xsm code="0000" msg="验证成功abc" trans_time="20140808162708"><userid>114</userid><nickname>wedc</nickname><usertype>2</usertype><comid>116</comid><saledptid>11601</saledptid><refid>1062014</refid><comname></comname><domainurl>v=2014080600</domainurl><comtype>02</comtype><comshort></comshort><parentcomid>11620001</parentcomid><expirationtime>1407488228735</expirationtime><plantext>10116226011162288228735</plantext><signaturevalue>c6959b4eacf7b2f</signaturevalue></xsm>

这是我用fwrite写入的$xml值

里面没有注释掉文件标记,可不知道问什么不能载入

你光截图是没有用的!
你怎么知道其中没有不可打印的字符呢?


在IE下查看会显示
结束标记 'xsm' 与开始标记 'comShort' 不匹配。

  1. SimpleXMLElement Object( [@attributes] => Array ( [code] => 0000 [msg] => 验证成功abc [trans_time] => 20140808162708 ) [userId] => 114 [nickName] => wedc [userType] => 2 [comId] => 116 [saledptId] => 11601 [refId] => 1062014 [comName] => SimpleXMLElement Object ( ) [domainUrl] => v=2014080600 [comType] => 02 [comShort] => SimpleXMLElement Object ( ) [parentComId] => 11620001 [expirationTime] => 1407488228735 [planText] => 10116226011162288228735 [signatureValue] => c6959b4eacf7b2f)
这不是可以吗?

你截图中显示字符串长度为 984 字节,而你贴出的只有 509 字节。
还有四百多字节到哪里去了?

你光截图是没有用的!
你怎么知道其中没有不可打印的字符呢?


版主,我知道,原因是里面有中文所以不能载入,这个如何才能解决?因为数据不是我自己的所以我也没法改

  1. SimpleXMLElement Object( [@attributes] => Array ( [code] => 0000 [msg] => 验证成功abc [trans_time] => 20140808162708 ) [userId] => 114 [nickName] => wedc [userType] => 2 [comId] => 116 [saledptId] => 11601 [refId] => 1062014 [comName] => SimpleXMLElement Object ( ) [domainUrl] => v=2014080600 [comType] => 02 [comShort] => SimpleXMLElement Object ( ) [parentComId] => 11620001 [expirationTime] => 1407488228735 [planText] => 10116226011162288228735 [signatureValue] => c6959b4eacf7b2f)
这不是可以吗?

你截图中显示字符串长度为 984 字节,而你贴出的只有 509 字节。
还有四百多字节到哪里去了?


还有400字节是一长串字符串太长我就删了半截
谢谢你,我发现原因了,是因为PHP用utf8编码的,而获取的xml数据时gbk的,把文件里的gbk改成utf8就解决了

  1. SimpleXMLElement Object( [@attributes] => Array ( [code] => 0000 [msg] => 验证成功abc [trans_time] => 20140808162708 ) [userId] => 114 [nickName] => wedc [userType] => 2 [comId] => 116 [saledptId] => 11601 [refId] => 1062014 [comName] => SimpleXMLElement Object ( ) [domainUrl] => v=2014080600 [comType] => 02 [comShort] => SimpleXMLElement Object ( ) [parentComId] => 11620001 [expirationTime] => 1407488228735 [planText] => 10116226011162288228735 [signatureValue] => c6959b4eacf7b2f)
这不是可以吗?

你截图中显示字符串长度为 984 字节,而你贴出的只有 509 字节。
还有四百多字节到哪里去了?
成功了 ~~~~~~[]

人气教程排行