<?php
$xml_data = file_get_contents('a.xml');
$simplexml = simplexml_load_string($xml_data);
print_r($simplexml);
?>
结果
SimpleXMLElement Object
(
[show] => Array
(
[0] =>SimpleXMLElement Object
(
[name] => The Simpsons
)
[1]=> SimpleXMLElement Object
(
[name] => That '70s Show
)
[2]=> SimpleXMLElement Object
(
[name] => Family Guy
)
[3]=> SimpleXMLElement Object
(
[name] => SimpleXMLElement Object
(
)
)
)
)
更新完善后的:
<?php
$xml_data = file_get_contents('a.xml');
$xml_data = uncdata($xml_data);
$simplexml = simplexml_load_string($xml_data);
print_r($simplexml);
function uncdata($xml)
{
// States:
//
// 'out'
// '<'
// '<!'
// '<!['
// '<![C'
// '<![CD'
// '<![CDAT'
// '<![CDATA'
// 'in'
// ']'
// ']]'
//
// (Yes, thestates a represented by strings.)
//
$state = 'out';
$a =str_split($xml);
$new_xml = '';
foreach ($a AS$k => $v) {
// Dealwith "state".
switch ($state ) {
case'out':
if( '<' == $v ) {
$state = $v;
}else {
$new_xml .= $v;
}
break;
case'<':
if( '!' == $v ) {
$state = $state . $v;
}else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case'<!':
if( '[' == $v ) {
$state = $state . $v;
}else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case'<![':
if( 'C' == $v ) {
$state = $state . $v;
}else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case'<![C':
if( 'D' == $v ) {
$state = $state . $v;
}else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case'<![CD':
if( 'A' == $v ) {
$state = $state . $v;
}else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case'<![CDA':
if( 'T' == $v ) {
$state = $state . $v;
}else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case'<![CDAT':
if( 'A' == $v ) {
$state = $state . $v;
}else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case'<![CDATA':
if( '[' == $v ) {
$cdata = '';
$state = 'in';
}else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case'in':
if( ']' == $v ) {
$state = $v;
}else {
$cdata .= $v;
}
break;
case']':
if( ']' == $v ) {
$state = $state . $v;
}else {
$cdata .= $state . $v;
$state = 'in';
}
break;
case']]':
if( '>' == $v ) {
$new_xml .= str_replace('>','>',
str_replace('>','<',
str_replace('"','"',
str_replace('&','&',
$cdata))));
$state = 'out';
} else {
$cdata .= $state . $v;
$state = 'in';
}
break;
} // switch
}
return$new_xml;
}
?>