Оно в строку


есть ли функция, которая делает строку из PHP simpleXMLElement?

7 73

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. Может быть, мне нужно сверлить объект дальше ...