【问题标题】:Prettifying/Formatting output in SimpleXMLSimpleXML 中的美化/格式化输出
【发布时间】:2012-04-12 23:14:42
【问题描述】:

我有这个 simplexml 脚本,用于发布从表单输入的数据。

$xml = simplexml_load_file("links.xml");

$sxe = new SimpleXMLElement($xml->asXML()); 

$person = $sxe->addChild("link");
$person->addChild("title", "Q: ".$x_title);
$person->addChild("url", "questions_layout.php#Question$id");

$sxe->asXML("links.xml"); 

当它出来时,它看起来像这样:

<link><title>Alabama State</title><url>questions_layout.php#Question37</url></link><link><title>Michigan State</title><url>questions_layout.php#Question37</url></link></pages>

但我已经尝试了找到 HERETHIS AS WELL 的方法,但它们都没有正确格式化行中的 XML,因为它们应该是这样的

<link>
<title></title>
<url></url>
</link>

在第一个参考链接中,我什至将loadXML 更改为load,因为loadXML 需要一个字符串作为XML。有人可以帮我解决这个问题吗?

【问题讨论】:

标签: php formatting simplexml


【解决方案1】:

AFAIK simpleXML 无法自行完成。

但是,DOMDocument 可以。

$dom = dom_import_simplexml($sxe)->ownerDocument;
$dom->formatOutput = TRUE;
$formatted = $dom->saveXML();

【讨论】:

  • 我尝试了你的答案,我在 `$formatted = $dom->saveXML(); 的行上收到了Fatal error: Call to undefined method DOMElement::saveXML()发生
  • @Tower 尝试在ownerDocument 上致电saveXML()
  • 将其更改为$dom = dom_import_simplexml($sxe)-&gt;ownerDocument;,尽管不再打印错误,但 XML 仍然没有被格式化并且全部显示在一行上。
  • @Tower 您如何查看它以确认这一点?
  • 我再次将数据输入到表单中,提交它,让 PHP 完成它的工作,然后在 Notepad++ 中查看 XML 文件,但现在我看到了,它只是以这种方式出现在Notepad++,但在 IE 或 Firefox 中,它看起来很有条理。我还应该担心在编辑器中使其格式正确吗?
【解决方案2】:

我认为上述来自 stackoverflow 权威的已接受答案并未解决上述问题。 参考:[我试过你的答案,我收到一个致命错误:调用未定义的方法 DOMElement::saveXML() 在$formatted = $dom-&gt;saveXML(); 所在的行上

$simplexml = simplexml_load_file("links.xml");
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($simplexml->asXML());
$xml = new SimpleXMLElement($dom->saveXML());

$person = $xml->addChild("link");
$person->addChild("title", "Q: ".$x_title);
$person->addChild("url", "questions_layout.php#Question$id");
$xml->saveXML("links.xml"); 

【讨论】:

    【解决方案3】:

    这段代码对我有用,而且很干净:

    header('Content-type: text/xml');
    
    echo $xml->asXML();
    

    其中 $xml 是 SimpleXMLElement - 此代码将按以下方式打印 XML

    <Attribute>
       <ChildAttribute>Value</ChildAttribute>
    </Attribute>
    

    这取自official PHP documentation SimpleXMLElement::asXML

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2011-10-29
      • 1970-01-01
      • 2018-09-28
      • 2016-02-08
      相关资源
      最近更新 更多