SimpleXml转换为字符串


Answers:


120

您可以使用该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();

19
$string = $xml->child->__toString();
卢克·斯诺登

htmlspecialchars($ xml-> asXML())吗?
zloctb

1
但是您只剩下标签了,如果您不想要标签怎么办?其他答案解决了这个问题
Andrew

63

您可以使用强制转换:

<?php

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

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

$ text将是“ Hello World”


2
对我有用,因为它没有放入标签,谢谢
Andrew

16

实际上,asXML()将该字符串转换为xml,正如其名称所示:

<id>5</id>

这将正常显示在网页上,但是当您将值与其他值进行匹配时会导致问题。

您可以使用strip_tags函数来获取字段的实际值,例如:

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

PS:如果您使用整数或浮点数,则需要使用intval()floatval()将其转换为整数。

$newNumber = intval(strip_tags($xml->asXML()));

15

您可以使用以下asXML方法:

<?php

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

// make any changes.
....

// convert the SimpleXMLElement back to string.
$newString = $xml->asXML();
?>

9

您可以->child用来获取名为child的子元素。

该元素将包含元素的文本。

但是,如果您尝试var_dump()使用该变量,则会看到它实际上不是PHP字符串。

解决此问题的最简单方法是执行strval(xml->child); “将”将其转换为实际的PHP字符串。

这在调试XML并var_dump()用于检查结果时进行调试时很有用。

这样$s = strval($xml->child);


4

这是我为解决此问题而编写的函数(假设标签没有属性)。此函数将在节点中保留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

1

有时您可以简单地键入:

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

$s = (string) $xml; // returns "en";

2
这是您从RSS feed的描述字段中获得的对象。这行得通,这是违反直觉的,但这是唯一给我提供字符串的解决方案$xmlitem->description。谢谢。
亨里克·埃兰森

0

可能取决于您可能需要/可能不需要使用XML提要__toString();我必须使用__toString()否则,它将在SimpleXMLElement内部返回字符串。也许我需要进一步挖掘该对象...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.