如何在PHP中正确地向XML字符串添加换行符?

5

我有一些手动构建的 XML,其格式类似于以下代码:

$xml = "<myxml>";
$xml .= "<items>";
$xml .= "<item1>blah</item1>";
$xml .= "</items>";
$xml .= "</myxml>";

当我输出字符串时,我希望换行符保留。如何在不影响接受XML的Web服务的情况下向字符串中添加换行符? XML中的换行符是否重要?

5个回答

15

新行不是必需的,但你可以使用PHP_EOL常量,该常量是一个跨平台的方法来查找换行符。例如:

$xml = "<myxml>".PHP_EOL;

我之前不知道 PHP_EOL 常量,谢谢你的建议! - stormist
没问题 :) PHP 有各种奇怪和神奇的东西,如果你有时间无聊的话,可以从头到尾阅读手册。 - Rwky

2

如果您不必担心不同类型的换行符("\n","\r\n","\r"),您可以简单地使用多行字符串字面量,例如

$xml = '<myxml>
  <items>
    <item1>blah</item1>
  </items>
</myxml>';

或者
$xml = <<< EOT
<myxml>
  <items>
    <item1>blah</item1>
  </items>
</myxml>
EOT;

请记住,这些文档并不一定相当于

<myxml><items><item1>blah</item1></items></myxml>

http://www.w3.org/TR/REC-xml/指出:

2.10 空格处理
[...]
XML处理器 必须 总是将文档中不是标记的所有字符传递给应用程序。验证XML处理器 还必须告知应用程序哪些字符构成元素内容中的空白。

一个名为xml:space的特殊属性可以附加到元素上,以表示在该元素中,应用程序应保留空格。

空格可以被标记为显著或不显著,消费者可以更多或更少地选择将它们处理为显著或不显著,例如通过使用 <xsl:strip-space .../>


非常感谢您提供如此详尽的解释,这是一份非常有用的回答。(但愿我能接受不止一个回答) - stormist

2
您可以通过执行$xml = "<myxml>\n";来添加它们,但是实际上它们并不必要,因为任何XML解析器都会忽略它们。

1

您可以这样编写您的XML:

$xml = <<<XML
<myxml>
 ...
</myxml>
XML;

1

不,它们在文本节点之外是无关紧要的。也就是说,在item1节点内的换行符将被保留。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接