PHP中用simpleXML解析XML文档,为啥总出错?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP中用simpleXML解析XML文档,为啥总出错?相关的知识,希望对你有一定的参考价值。
xml文档是一个自动生成的东西。我用simpleXML去解析他,但总是不一定在什么位置就会出错。
代码是这样:$xmld = new SimpleXMLElement($xml);
错误是这样的:
Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in D:\Apache\htdocs\extra.php:74
Stack trace:
#0 D:\Apache\htdocs\extra.php(74): SimpleXMLElement->__construct('')
#1 main
thrown in D:\Apache\htdocs\extra.php on line 74
这会是什么原因造成的呢?XML文档生成的不正确吗?
谢谢你~
我这里的的$xml就是通过file_get_contents(xml文件路径)获得的字符串,应该符合你说的要求吧?因为我在批量处理一些xml,有成功解析的,但是总是在进行到一定数量的时候出现这个错误
多谢专家~因为生成xml的那个程序是买来的,而且单个测试都没问题,只要一放进我的循环里就会出现这样的错误。可我也不能确定是哪一方的问题。
我又看了下,我是用@file_get_content来获得的xml,我把@去掉之后,出现的错误就应该是file_get_contents的错误了:Warning: file_get_contents(http://localhost:8081/newindex/GetUrl?lietu_uri=http://sound.zol.com.cn/subcate_223.html) [function.file-get-contents]: failed to open stream: HTTP request failed! in D:\Apache\htdocs\extra.php on line 74
=========
回sunnyPower:因为我是调用来的xml,而单独调用得到的这个xml没有问题。我怀疑是不是因为file_get_contents就没给抓过来呢?
这个问题在这里有补充~麻烦高手帮个忙啦
http://zhidao.baidu.com/question/96267985.html
你加我的代码后,有执行到die($xml)这一行吗?有的话把输出的XML内容发过来帮你分析一下
应该是XML本身的格式就不正确,自然解析失败
try
$xmld = new SimpleXMLElement($xml);
catch(Exception $e)
die($xml);
这样出错的时候就能知道那个XML是什么内容就知道哪里错了 参考技术A 对于字符串转换成xml,应该用simplexml_load_string函数唯一的参数就是要转换的字符串
不过要注意的是,这个函数要求字符串最前面必须有xml的文档声明
<?xml version="1.0" encoding="utf-8"?>
php使用SimpleXML解析xml文档将其转化为数组
XML 的设计宗旨是传输数据,而非显示数据。因为需要读取其中数据。我们通常对数组的操作非常熟悉我们可将xml解析完当成数组处理。
<?xml version="1.0" encoding="utf-8"?>
<books>
<item>
<title>三国</title>
<price>30.33</price>
<author>
<name>李健</name>
</author>
</item>
<item>
<title>西游</title>
<price>25.55</price>
<author>lijian</author>
</item>
<item>
<title>红梦</title>
<price>14.44</price>
<author>lijian</author>
</item>
</books>
以下是php内容
<?php
//读取xml
$xml=simplexml_load_file("2.xml");
print_r($xml);
function toArray($sim) {
$arr = (array) $sim;
foreach($arr as $k=>$v) {
if($v instanceof simplexmlelement || is_array($v)) { //可以更换为is_object($v)
$arr[$k] = toArray($v);
}
}
return $arr;
}
$arr = toArray($xml);
print_r($arr);
exit;
这里附上另一种转数组方法
<?php
$xml = simplexml_load_file(‘2.xml‘);
$xml = json_decode(json_encode($xml), true);
print_r($xml);
exit;
数组转回xml方式
<?php
$arr = array (
‘item‘ =>
array (
0 =>
array (
‘title‘ => ‘三国‘,
‘price‘ => ‘30.33‘,
‘author‘ =>
array (
‘name‘ => ‘李健‘,
),
),
1 =>
array (
‘title‘ => ‘西游‘,
‘price‘ => ‘25.55‘,
‘author‘ => ‘lijian‘,
),
2 =>
array (
‘title‘ => ‘红梦‘,
‘price‘ => ‘14.44‘,
‘author‘ => ‘lijian‘,
),
),
);
function arr2xml($arr,$node=null){
if($node === null){
$simxml = new simpleXMLElement(‘<?xml version="1.0" encoding="utf-8"?><root></root>‘);
}else{
$simxml = $node;
}
foreach($arr as $k=>$v){
if(is_numeric($k)){
$k = ‘item‘;
}
if(is_array($v)){
arr2xml($v,$simxml->addChild($k));
}else{
$simxml->addChild($k,$v);
}
}
return $simxml->saveXML();
}
header(‘content-type:text/xml‘);
echo arr2xml($arr);
exit;
以上是关于PHP中用simpleXML解析XML文档,为啥总出错?的主要内容,如果未能解决你的问题,请参考以下文章