$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 to SimpleXMLElement$xml = new SimpleXMLElement($string);
// make any changes.
....
// convert the SimpleXMLElement back to string.$newString = $xml->asXML();
?>
Это тип объекта, который вы получаете для поля описания RSS-канала. Это нелогично, но это было единственное решение, которое дало мне внутреннюю строку $xmlitem->description. Благодарю.
Хенрик Эрландссон
0
Вероятно, в зависимости от канала XML вам может / не нужно использовать __toString(); Мне пришлось использовать, __toString()иначе он возвращает строку внутри 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 () преобразует строку в xml, как сказано в названии:
<id>5</id>
Это будет нормально отображаться на веб-странице, но вызовет проблемы при сопоставлении значений с чем-то другим.
Вы можете использовать функцию 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 .Этот элемент будет содержать текст дочернего элемента.
Но если вы попробуете
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. Может, мне нужно глубже изучить объект ...источник