如何获取XML元素(SimpleXMLElement)的字符串类型内容,被PHPsimplexml_load_string解析?

How to get the string-type content of the XML element (SimpleXMLElement), that is parsed by PHP simplexml_load_string?

我有 PHP 8 代码:

$test = '<?xml version="1.0" encoding="utf-8"?>
        <FDL>
            <TITLE>
                <Title>Test element</Title>
            </TITLE>  
        </FDL>';
    $test_obj = simplexml_load_string($test);
    var_dump($test_obj->TITLE->Title);
    var_dump($test_obj->TITLE->Title->children);

哪个 returns:

object(SimpleXMLElement)#5 (1) {
    [
        0
    ]=>
  string(12) "Test element"
}
object(SimpleXMLElement)#3 (0) {}

这就是我的问题——$test_obj->TITLE->Title$test_obj->TITLE->Title->childrenreturn对象(SimpleXMLElement),但我对这个元素的字符串类型的内容感兴趣?我怎样才能访问它?当然,如果我在之前的代码中使用 echo(而不是 var_dump),那么我可以看到字符串类型的内容,但在幕后 - 这不是字符串类型变量,它的行为也不像字符串类型变量在我尝试使用它的进一步 PHP 代码中。

那么 - 如何从 SimpleXMLElement 获取字符串类型的内容?

您可以使用 xpath 而不是点符号:

$target = (string)$test_obj->xpath("//TITLE/Title")[0];
echo $target,": ", gettype($target);

输出:

Test element: string

方法是 "cast" the variable to a string, using the standard PHP syntax (string)$someVariableOrExpression, which is defined specially on the SimpleXMLElement class:

    $test = '<?xml version="1.0" encoding="utf-8"?>
        <FDL>
            <TITLE>
                <Title>Test element</Title>
            </TITLE>  
        </FDL>';
    $test_obj = simplexml_load_string($test);
    $content = (string)$test_obj->TITLE->Title;
    var_dump($content);
    # string(12) "Test element"

这实际上是让 echo 在幕后工作的原因:它首先将您给它的任何参数转换为字符串,这告诉 SimpleXMLElement 对象 return 它的字符串内容。

这也显示在 some of the SimpleXML examples in the PHP manual