PHP SimpleXMLElement
から文字列を作成する関数はありますか?
SimpleXMLElement::asXML()
メソッドを使用してこれを実現できます。
$string = "<element><child>Hello World</child></element>";
$xml = new SimpleXMLElement($string);
// The entire XML tree as a string:
// "<element><child>Hello World</child></element>"
$xml->asXML();
// Just the child node as a string:
// "<child>Hello World</child>"
$xml->child->asXML();
キャストを使用できます:
<?php
$string = "<element><child>Hello World</child></element>";
$xml = new SimpleXMLElement($string);
$text = (string)$xml->child;
$ textは「Hello World」になります
実際、asXML()は名前が示すとおり、文字列をxmlに変換します。
<id>5</id>
これは通常Webページに表示されますが、他の値と値を一致させると問題が発生します。
次のようにstrip_tags関数を使用して、フィールドの実際の値を取得できます。
$newString = strip_tags($xml->asXML());
PS:整数または浮動小数点数を使用している場合、intval()またはfloatval()で整数に変換する必要があります。
$newNumber = intval(strip_tags($xml->asXML()));
asXML
メソッドを次のように使用できます。
<?php
// string to SimpleXMLElement
$xml = new SimpleXMLElement($string);
// make any changes.
....
// convert the SimpleXMLElement back to string.
$newString = $xml->asXML();
?>
->child
を使用して、childという名前の子要素を取得できます。
この要素には、child要素のテキストが含まれます。
しかし、その変数でvar_dump()
を試してみると、実際にはPHP文字列ではないことがわかります。
これを回避する最も簡単な方法は、実際のPHP文字列に変換するstrval(xml->child);
を実行することです。
これは、XMLをループしているときにデバッグし、var_dump()
を使用して結果を確認するときに役立ちます。
$s = strval($xml->child);
です。
この問題を解決するために作成した関数を次に示します(タグに属性がないと仮定した場合)。この関数は、ノードでHTMLフォーマットを保持します。
function getAsXMLContent($xmlElement)
{
$content=$xmlElement->asXML();
$end=strpos($content,'>');
if ($end!==false)
{
$tag=substr($content, 1, $end-1);
return str_replace(array('<'.$tag.'>', '</'.$tag.'>'), '', $content);
}
else
return '';
}
$string = "<element><child>Hello World</child></element>";
$xml = new SimpleXMLElement($string);
echo getAsXMLContent($xml->child); // prints Hello World
ときどき単純に型キャストできます:
// this is the value of my $xml
object(SimpleXMLElement)#10227 (1) {
[0]=>
string(2) "en"
}
$s = (string) $xml; // returns "en";
これは古い投稿ですが、私の調査結果は誰かを助けるかもしれません。
おそらく XMLフィードに応じて、__ toString()を使用する必要がある場合としない場合があります。 __toString()を使用する必要がありました。そうしないと、SimpleXMLElement内の文字列が返されます。オブジェクトをさらにドリルダウンする必要があるかもしれません...