Есть ли какая-либо функция, которая делает строку из 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
как:
<?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 .
Этот элемент будет содержать текст дочернего элемента.
Но если вы попробуете var_dump()
для этой переменной, вы увидите, что это не строка PHP.
Самый простой способ – выполнить strval(xml->child);
Это преобразует его в фактическую строку PHP.
Это полезно при отладке при var_dump()
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