Есть ли функция, которая делает строку из PHP SimpleXMLElement
?
SimpleXml для строки
Ответ 1
Вы можете использовать метод 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();
Ответ 2
Вы можете использовать кастинг:
<?php
$string = "<element><child>Hello World</child></element>";
$xml = new SimpleXMLElement($string);
$text = (string)$xml->child;
$text будет "Hello World"
Ответ 3
На самом деле asXML() преобразует строку в xml, как сказано в названии:
<id>5</id>
Это будет отображаться обычно на веб-странице, но это вызовет проблемы при сопоставлении значений с чем-то другим.
Вы можете использовать функцию strip_tags для получения реального значения поля, например:
$newString = strip_tags($xml->asXML());
PS: если вы работаете с целыми числами или плавающими числами, вам нужно преобразовать его в целое число с помощью intval() или floatval().
$newNumber = intval(strip_tags($xml->asXML()));
Ответ 4
Вы можете использовать метод asXML
как:
<?php
// string to SimpleXMLElement
$xml = new SimpleXMLElement($string);
// make any changes.
....
// convert the SimpleXMLElement back to string.
$newString = $xml->asXML();
?>
Ответ 5
Вы можете использовать ->child
для получения дочернего элемента с именем child.
Этот элемент будет содержать текст дочернего элемента.
Но если вы попробуете var_dump()
в этой переменной, вы увидите, что это не строка PHP.
Самый простой способ - выполнить strval(xml->child);
Это преобразует его в фактическую строку PHP.
Это полезно при отладке при циклизации XML и использовании var_dump()
для проверки результата.
Итак $s = strval($xml->child);
.
Ответ 6
Вот функция, которую я написал для решения этой проблемы (предполагая, что тег не имеет атрибутов). Эта функция сохранит форматирование HTML в node:
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
Ответ 7
Это старый пост, но мои выводы могут кому-то помочь.
Возможно, в зависимости от фида xml вам может не понадобиться __toString(); Мне пришлось использовать __toString(), иначе он возвращает строку внутри SimpleXMLElement. Может быть, мне нужно углубить объект дальше...
Ответ 8
Иногда вы можете просто набрать:
// this is the value of my $xml
object(SimpleXMLElement)#10227 (1) {
[0]=>
string(2) "en"
}
$s = (string) $xml; // returns "en";