【问题标题】:php string function concatphp字符串函数concat
【发布时间】:2010-02-19 13:17:09
【问题描述】:
$contents  = "<?xml version='1.0' ?>
        <authed>1</authed>
            <book>read</book>";

我有一个这样的 xml 字符串 我想在根标签内添加所有元素

喜欢这个

$contents  = "<?xml version='1.0' ?>
        <root>
        <authed>1</authed>
            <book>read</book>
        </root>";

【问题讨论】:

  • 不是一个“xml字符串”。这是一个字符串,但这不是 XML。一个 XML 文档只有一个根元素。
  • 正确的术语是well-formed。它不是格式良好的 XML 文档。

标签: php xml string function concat


【解决方案1】:

XML 上的字符串操作就像 HTML 上的正则表达式操作一样。 This 回答正确。

【讨论】:

    【解决方案2】:

    您可以使用 substr 提取第一部分(xml 版本)和第二部分(元素),然后重新组合

    【讨论】:

      【解决方案3】:

      如果添加根元素是您唯一想做的事情,您可以这样做

      $contents = str_replace("<?xml version='1.0' ?>", 
                              "<?xml version='1.0' ?><root>", 
                              $contents . '</root>');
      

      这将用它自己加上内容中的根元素和附加的结束根标记替换序言。但是,请记住,从技术上讲,我们只是在此处插入随机字符串,而不是节点,这意味着 &lt;root&gt; 的处理方式与 oot&gt;&lt;aut 相同。使用字符串时,尖括号没有特殊含义。我们自己定义了语义。这对于像上面这样的简单用例来说是可以的。

      但如果您想使用节点,请考虑使用 XML libraries of PHP 之一。

      【讨论】:

        【解决方案4】:

        这不是有效的 XML。 XML 文档只有一个根元素。 应该修复任何生成的 not-XML 标签汤,以便它输出一些有效的 XML。

        否则,如果您自找麻烦,您可以使用任何类型的字符串替换。

        $contents = preg_replace('#^<\\?.*?\\?>#', '$0<root>', $contents) . '</root>';
        

        【讨论】:

          猜你喜欢
          • 2022-01-06
          • 1970-01-01
          • 2018-02-02
          • 1970-01-01
          • 2019-08-17
          • 1970-01-01
          • 1970-01-01
          • 2013-08-09
          • 2017-11-29
          相关资源
          最近更新 更多