【发布时间】:2011-04-11 02:16:52
【问题描述】:
是否有任何函数可以从 PHP SimpleXMLElement 生成字符串?
【问题讨论】:
-
你想要什么样的字符串?
是否有任何函数可以从 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();
【讨论】:
$string = $xml->child->__toString();
您可以使用强制转换:
<?php
$string = "<element><child>Hello World</child></element>";
$xml = new SimpleXMLElement($string);
$text = (string)$xml->child;
$text 将是“Hello World”
【讨论】:
您可以将asXML 方法用作:
<?php
// string to SimpleXMLElement
$xml = new SimpleXMLElement($string);
// make any changes.
....
// convert the SimpleXMLElement back to string.
$newString = $xml->asXML();
?>
【讨论】:
实际上 asXML() 将字符串转换为 xml,正如它的名字所说:
<id>5</id>
这将在网页上正常显示,但是当您将值与其他内容匹配时会导致问题。
您可以使用 strip_tags 函数来获取字段的实际值,例如:
$newString = strip_tags($xml->asXML());
PS:如果您使用整数或浮点数,则需要使用 intval() 或 floatval() 将其转换为整数。
$newNumber = intval(strip_tags($xml->asXML()));
【讨论】:
您可以使用->child 来获取一个名为child 的子元素。
这个元素将包含 child 元素的文本。
但是如果你尝试var_dump() 对该变量,你会发现它实际上不是一个 PHP 字符串。
解决此问题的最简单方法是执行strval(xml->child);
这会将其转换为实际的 PHP 字符串。
这在循环您的 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";
【讨论】:
$xmlitem->description 中的字符串的解决方案。谢谢。
可能取决于您可能/可能不需要使用 __toString() 的 XML 提要;我必须使用__toString(),否则它会返回 SimpleXMLElement 中的字符串。也许我需要进一步深入研究对象......
【讨论】: