Чи існує якась функція, яка робить рядок з 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();
Насправді asXML () перетворює рядок у xml, як сказано в назві:
<id>5</id>
Це зазвичай відображається на веб-сторінці, але це спричинить проблеми, коли ви співпадаєте значення з чимось іншим.
Ви можете використовувати функцію strip_tags, щоб отримати реальне значення поля, наприклад:
$newString = strip_tags($xml->asXML());
PS: якщо ви працюєте з цілими чи плаваючими числами, вам потрібно перетворити його на ціле з intval () або floatval () .
$newNumber = intval(strip_tags($xml->asXML()));
Ви можете використовувати, ->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
. Дякую.
Можливо, залежно від стрічки XML, яку вам може / може не знадобитися використовувати __toString()
; Мені довелося використовувати, __toString()
інакше він повертає рядок усередині SimpleXMLElement. Можливо, мені потрібно детальніше розібрати об'єкт ...