【问题标题】:How to properly add newlines to an XML string in PHP?如何在 PHP 中为 XML 字符串正确添加换行符?
【发布时间】:2010-05-07 01:22:03
【问题描述】:

我有一些xml,我在一个函数中手动构建,类似于:

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

当我输出字符串时,虽然我希望出现换行符。如何在不影响接受 xml 的 Web 服务的情况下将其添加到字符串中? XML 中的换行符是否重要?

【问题讨论】:

    标签: php xml newline


    【解决方案1】:

    新行不是必需的,但您可以使用 PHP_EOL 常量,这是一种跨平台查找新行字符的方法。即

    $xml = "<myxml>".PHP_EOL;
    

    【讨论】:

    • 我不知道 PHP_EOL 常量感谢您的建议!
    • 没问题 :) PHP 中有各种奇怪而奇妙的东西,如果你厌烦了,可以从头到尾阅读手册。
    【解决方案2】:

    您可以通过 $xml = "&lt;myxml&gt;\n"; 添加它们,但是,它们根本不是必需的,因为任何 XML 解析器都会忽略它们。

    【讨论】:

      【解决方案3】:

      如果您不必担心不同类型的换行符(“\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 的特殊属性可以附加到元素上,以表明在该元素中,应用程序应保留空白空间

      空格可以被标记为重要或不重要,消费者可以或多或少地选择是否将它们处理为不重要/重要,例如通过&lt;xsl:strip-space .../&gt;。

      【讨论】:

      • 感谢您非常彻底的解释,一个非常翔实的答案。 (希望我能接受不止一个)
      【解决方案4】:

      不,它们在文本节点之外是无关紧要的。 IE,item1节点内的换行符将被尊重

      【讨论】:

        【解决方案5】:

        你可以这样写你的XML,

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-14
          • 2016-07-19
          • 2014-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多