略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: 范例

2024-11-14

add a noteadd a note

User Contributed Notes 4 notes

up
33
Juan Herrera
12 years ago
When using simplexml to access a element the returned object may be a SimpleXMLElement instead of a string.

Example:

<?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);
?>

Expected result:
----------------
SimpleXMLElement Object
(
    [cmd] => login
    [login] => Richard
)
Richard
Richard

Actual result:
--------------
SimpleXMLElement Object
(
    [cmd] => login
    [login] => Richard
)
SimpleXMLElement Object
(
    [0] => Richard
)
Richard

But this is an intended behavior. See http://bugs.php.net/bug.php?id=29500
up
-6
mike at mike-griffiths dot co dot uk
14 years ago
It is important that you select the correct method of loading the XML in depending on the format of your XML file.

If you use the wrong function to load it in you will get some strange errors.
up
-23
Kari P.
13 years ago
To take care of proper error checking, one must use try-catch blocks:

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

To get rid of warnings, use @ in front of new:

<?php
try {
 
$sxe = @new SimpleXMLElement($xmlstring);
} catch (
Exception $e) {
  echo
"bad xml";
}
?>
up
-33
info at accountr dot eu
13 years ago
Instead of using  <?php eval($code) ?>

you can use this method,

<?php

$node
= "node";

$XML = simplexml_load_file($file);

$text = (string)$XML->nodes->{$node}; // works
// or
$text2 = (string)$XML->{$node}->child; // also works fine

?>

I think it is much more easier instead of eval().

官方地址:https://www.php.net/manual/en/simplexml.examples.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3