Оно в строку
есть ли функция, которая делает строку из PHP simpleXMLElement?
7 ответов:
можно использовать
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() преобразует строку в 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
получить дочерний элемент с именем ребенок.этот элемент будет содержать текст ребенок элемент.
но если ты попытаешься
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
Это старый пост, но мои выводы могут помочь кому-то.
наверное в зависимости от XML-канала вам может/может не понадобиться использовать __toString(); мне пришлось использовать __toString() в противном случае он возвращает строку внутри SimpleXMLElement. Может быть, мне нужно сверлить объект дальше ...