添加笔记

用户贡献笔记 4 个笔记

39
Juan Herrera
14 年前
使用 SimpleXML 访问元素时,返回的对象可能是 SimpleXMLElement 而不是字符串。

示例

<?php
$string
= <<<XML
<?xml version='1.0'?>
<document>
<cmd>login</cmd>
<login>Richard</login>
</document>
XML;


$xml = simplexml_load_string($string);
print_r($xml);
$login = $xml->login;
print_r($login);
$login = (string) $xml->login;
print_r($login);
?>

预期结果
----------------
SimpleXMLElement 对象
(
[cmd] => login
[login] => Richard
)
Richard
Richard

实际结果
--------------
SimpleXMLElement 对象
(
[cmd] => login
[login] => Richard
)
SimpleXMLElement 对象
(
[0] => Richard
)
Richard

但这是预期的行为。查看 http://bugs.php.net/bug.php?id=29500
-4
mike at mike-griffiths dot co dot uk
16 年前
重要的是,您根据 XML 文件的格式选择正确的 XML 加载方法。

如果使用错误的函数加载,将会出现一些奇怪的错误。
-25
Kari P.
15 年前
要进行适当的错误检查,必须使用 try-catch 块

<?php
try {
$sxe = new SimpleXMLElement($xmlstring);
} catch (
Exception $e) {
echo
"bad xml";
}
?>

要消除警告,在 new 前面使用 @

<?php
try {
$sxe = @new SimpleXMLElement($xmlstring);
} catch (
Exception $e) {
echo
"bad xml";
}
?>
-35
info at accountr dot eu
15 年前
而不是使用 <?php eval($code) ?>

您可以使用此方法,

<?php

$node
= "node";

$XML = simplexml_load_file($file);

$text = (string)$XML->nodes->{$node}; // 有效
// 或者
$text2 = (string)$XML->{$node}->child; // 也能正常工作

?>

我认为这比 eval() 更容易。
To Top