【问题标题】:SimpleXml to stringSimpleXml 到字符串
【发布时间】:2011-04-11 02:16:52
【问题描述】:

是否有任何函数可以从 PHP SimpleXMLElement 生成字符串?

【问题讨论】:

  • 你想要什么样的字符串?

标签: php xml simplexml


【解决方案1】:

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

【讨论】:

  • $string = $xml-&gt;child-&gt;__toString();
  • htmlspecialchars($xml->asXML()) ?
  • 但是你留下了标签,如果你不想要标签怎么办?其他答案解决了这个问题
【解决方案2】:

您可以使用强制转换:

<?php

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

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

$text 将是“Hello World”

【讨论】:

  • 对我有用,因为它没有放入标签,谢谢
【解决方案3】:

您可以将asXML 方法用作:

<?php

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

// make any changes.
....

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

【讨论】:

    【解决方案4】:

    实际上 asXML() 将字符串转换为 xml,正如它的名字所说:

    <id>5</id>
    

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

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

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

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

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

    【讨论】:

      【解决方案5】:

      您可以使用-&gt;child 来获取一个名为child 的子元素。

      这个元素将包含 child 元素的文本。

      但是如果你尝试var_dump() 对该变量,你会发现它实际上不是一个 PHP 字符串。

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

      这在循环您的 XML 并使用 var_dump() 检查结果时进行调试时很有用。

      所以$s = strval($xml-&gt;child);

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

          有时您可以简单地进行类型转换:

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

          【讨论】:

          • 这是您为 RSS 提要的描述字段获取的对象类型。它的工作原理是违反直觉的,但它是这里唯一给我$xmlitem-&gt;description 中的字符串的解决方案。谢谢。
          【解决方案8】:

          可能取决于您可能/可能不需要使用 __toString() 的 XML 提要;我必须使用__toString(),否则它会返回 SimpleXMLElement 中的字符串。也许我需要进一步深入研究对象......

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-05-06
            • 1970-01-01
            • 2023-03-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-10-18
            • 2010-09-19
            相关资源
            最近更新 更多