私はこのような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オブジェクトを文字列に強制する最良の方法は何ですか?
SimpleXMLObjectを文字列に型キャストする
_$foo = array( (string) $xml->channel->item->title );
_
上記のコードは、SimpleXMLObjectで__toString()
を内部的に呼び出します。このメソッドはSimpleXMLObjectのマッピングスキームに干渉するため、公開されていませんが、上記の方法で呼び出すことができます。
PHP関数を使用できます
strval();
この関数は、渡されたパラメーターの文字列値を返します。
ネイティブ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
別の見苦しい方法:
$foo = array( $xml->channel->item->title."" );
それは動作しますが、きれいではありません。
受け入れられた答えは、実際には、OPが要求したもの(文字列)ではない文字列を含む配列を返します。その答えを拡張するには、次を使用します。
$foo = [ (string) $xml->channel->item->title ][0];
配列の単一の要素である文字列を返します。
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->を展開できます。また、レベルなしで、または他の方法ですべてのノードを1つの配列に配置することもできます。
Strval($ xml-> channel-> item-> title)を試してください
ネイティブ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());
受け入れられた答えが書かれたので、彼らが__toString()
メソッドの可視性を変更したかどうかはわかりませんが、この時点ではうまくいきます:
var_dump($xml->channel->item->title->__toString());
出力:
string(15) "This is title 1"