SimpleXml для строки

Есть ли какая-либо функция, которая делает строку из 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