SimpleXML в строку


Существует ли какая-либо функция, которая создает строку из PHP SimpleXMLElement?

Author: liysd, 2010-09-11

7 answers

Вы можете использовать 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();
 103
Author: Tim Cooper, 2013-07-31 16:20:14

Вы можете использовать приведение:

<?php

$string = "<element><child>Hello World</child></element>";
$xml = new SimpleXMLElement($string);

$text = (string)$xml->child;

$текст будет "Привет, мир"

 55
Author: Nicolay77, 2012-11-23 20:33:00

На самом деле asXML() преобразует строку в xml, как указано в ее названии:

<id>5</id>

Это будет нормально отображаться на веб-странице, но это вызовет проблемы при сопоставлении значений с чем-то другим.

Вы можете использовать функцию strip_tags, чтобы получить реальное значение поля, например:

$newString = strip_tags($xml->asXML());

PS: если вы работаете с целыми числами или числами с плавающей запятой, вам необходимо преобразовать их в целое число с помощью intval() или floatval().

$newNumber = intval(strip_tags($xml->asXML()));
 14
Author: tolginho, 2012-08-16 22:23:52

Вы можете использовать asXML метод как:

<?php

// string to SimpleXMLElement
$xml = new SimpleXMLElement($string);

// make any changes.
....

// convert the SimpleXMLElement back to string.
$newString = $xml->asXML();
?>
 13
Author: codaddict, 2010-09-11 13:11:29

Вы можете использовать ->child, чтобы получить дочерний элемент с именем дочерний.

Этот элемент будет содержать текст дочернего элемента .

Но если вы попробуете var_dump() с этой переменной, вы увидите, что на самом деле это не строка PHP.

Самый простой способ обойти это - выполнить strval(xml->child); Это преобразует его в реальную строку PHP.

Это полезно при отладке при циклическом использовании XML и использовании var_dump() для проверки результата.

Итак $s = strval($xml->child);.

 7
Author: Leander, 2015-04-18 07:55:02

Вот функция, которую я написал для решения этой проблемы (предполагая, что у тега нет атрибутов). Эта функция сохранит форматирование 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
 4
Author: paralaks, 2016-09-15 04:00:35

Это старый пост, но мои выводы могут кому-то помочь.

Вероятно, в зависимости от xml-канала вам может потребоваться/ может не потребоваться использовать __toString(); Мне пришлось использовать __toString(), иначе он возвращает строку внутри SimpleXMLElement. Может быть, мне нужно детализировать объект дальше...

 0
Author: Keenan Stewart, 2018-02-24 00:27:10