SimpleXml в строку - PullRequest
       1

SimpleXml в строку

77 голосов
/ 11 сентября 2010

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

Ответы [ 8 ]

114 голосов
/ 11 сентября 2010

Для этого можно использовать метод 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();
57 голосов
/ 24 ноября 2012

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

<?php

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

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

$ текст будет «Hello World»

15 голосов
/ 17 августа 2012

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

<id>5</id>

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

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

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

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

$newNumber = intval(strip_tags($xml->asXML()));
13 голосов
/ 11 сентября 2010

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

<?php

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

// make any changes.
....

// convert the SimpleXMLElement back to string.
$newString = $xml->asXML();
?>
8 голосов
/ 16 июля 2013

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

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

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

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

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

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

4 голосов
/ 01 августа 2013

Вот функция, которую я написал для решения этой проблемы (при условии, что у тега нет атрибутов). Эта функция сохранит форматирование 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
0 голосов
/ 15 мая 2019

Иногда вы можете просто набрать:

// this is the value of my $xml
object(SimpleXMLElement)#10227 (1) {
  [0]=>
  string(2) "en"
}

$s = (string) $xml; // returns "en";
0 голосов
/ 24 февраля 2018

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

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

...