a.xml
The Simpsons
That '70s Show
Family Guy
test.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
(
)
)
)
)
从网上看到的解决方法
test.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'
// '
// '
// '
// '
// '
// '
// '
// 'in'
// ']'
// ']]'
//
// (Yes, the states a represented by strings.)
//
$state = 'out';
$a = str_split($xml);
$new_xml = '';
foreach ($a AS $k => $v) {
// Deal with "state".
switch ( $state ) {
case 'out':
if ( '
$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 '
if ( 'D' == $v ) {
$state = $state . $v;
} else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case '
if ( 'A' == $v ) {
$state = $state . $v;
} else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case '
if ( 'T' == $v ) {
$state = $state . $v;
} else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case '
if ( 'A' == $v ) {
$state = $state . $v;
} else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case '
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.
//
return $new_xml;
}
?>
其实只想取里头的内容,在输出前加上(string)就行。
echo (string)$simplexml->show[3]->name;