79

假设我有一些这样的 XML

<channel>
  <item>
    <title>This is title 1</title>
  </item>
</channel>

下面的代码做了我想要的,它将标题作为字符串输出

$xml = simplexml_load_string($xmlstring);
echo $xml->channel->item->title;

这是我的问题。下面的代码在该上下文中不将标题视为字符串,因此我最终在数组中使用 SimpleXML 对象而不是字符串。

$foo = array( $xml->channel->item->title );

我一直在这样解决它

$foo = array( sprintf("%s",$xml->channel->item->title) );

但这似乎很难看。

无论上下文如何,将 SimpleXML 对象强制为字符串的最佳方法是什么?

4

11 回答 11

153

将 SimpleXMLObject 类型转换为字符串:

$foo = array( (string) $xml->channel->item->title );

上面的代码在内部调用__toString()了 SimpleXMLObject。此方法不公开,因为它会干扰 SimpleXMLObject 的映射方案,但仍可以通过上述方式调用它。

于 2009-01-06T14:01:58.430 回答
22

你可以使用PHP函数

strval();

此函数返回传递给它的参数的字符串值。

于 2009-02-04T20:06:57.537 回答
9

有本机 SimpleXML 方法SimpleXMLElement::asXML 根据参数,它将 SimpleXMLElement 写入 xml 1.0 文件或仅写入字符串:

$xml = new SimpleXMLElement($string);
$validfilename = '/temp/mylist.xml';
$xml->asXML($validfilename);    // to a file
echo $xml->asXML();             // to a string
于 2013-02-01T06:03:03.433 回答
3

另一种丑陋的做法:

$foo = array( $xml->channel->item->title."" );

它有效,但它并不漂亮。

于 2012-08-13T08:25:25.743 回答
3

接受的答案实际上返回一个包含字符串的数组,这不是 OP 所要求的(字符串)。要扩展该答案,请使用:

$foo = [ (string) $xml->channel->item->title ][0];

它返回数组的单个元素,一个字符串。

于 2016-09-07T16:24:21.027 回答
2

要将 XML 数据放入 php 数组中,请执行以下操作:

// this gets all the outer levels into an associative php array
$header = array();
foreach($xml->children() as $child)
{
  $header[$child->getName()] = sprintf("%s", $child); 
}
echo "<pre>\n";
print_r($header);
echo "</pre>";

要得到一个孩子的孩子,然后这样做:

$data = array();
foreach($xml->data->children() as $child)
{
  $header[$child->getName()] = sprintf("%s", $child); 
}
echo "<pre>\n";
print_r($data);
echo "</pre>";

您可以通过每个级别扩展 $xml-> 直到获得所需的内容。您还可以将所有节点放入一个数组中,而无需级别或几乎任何其他您想要的方式。

于 2011-07-11T21:27:17.870 回答
1

试试 strval($xml->channel->item->title)

于 2017-07-04T15:04:59.330 回答
1

不确定他们是否改变了__toString()方法的可见性,因为接受的答案是写的,但此时它对我来说很好:

var_dump($xml->channel->item->title->__toString());

输出:

string(15) "This is title 1"
于 2017-09-29T15:40:07.397 回答
0

有本机 SimpleXML 方法 SimpleXMLElement::asXML 根据参数,它将 SimpleXMLElement 写入 xml 1.0 文件,是的

$get_file= read file from path;
$itrate1=$get_file->node;
$html  = $itrate1->richcontent->html;


echo  $itrate1->richcontent->html->body->asXML();
 print_r((string) $itrate1->richcontent->html->body->asXML());
于 2018-11-23T09:54:19.010 回答
0

只需输入''。在任何变量之前,它将转换为字符串。

$foo = array(''.$xml->channel->item->title);

于 2020-05-03T15:36:07.823 回答
-1

以下是将所有单子元素类型转换为 a 的递归函数String

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// FUNCTION - CLEAN SIMPLE XML OBJECT
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function cleanSimpleXML($xmlObject = ''){

    // LOOP CHILDREN
    foreach ($xmlObject->children() as $child) {

        // IF CONTAINS MULTIPLE CHILDREN
        if(count($child->children()) > 1 ){

            // RECURSE
            $child = cleanSimpleXML($child);

        }else{

            // CAST
            $child = (string)$child;

        }

    }

    // RETURN CLEAN OBJECT
    return $xmlObject;

} // END FUNCTION
于 2017-07-17T19:26:56.683 回答