如何在PHP中生成像这种格式的xml

时间:2017-11-08 06:42:30

标签: php xml

<resource>
<string>a</string><--comment here-->
<string>b</string>
</resource>

我的项目需要以上述方式生成xml。 我正在使用php基础库DOMDocument来生成它。

如果我使用 formatOutput = true ,那就是

<resource>
<string>a</string>
<--comment-->
<string>b</string>
</resource>

,如果没有,那就是 <resource><string>a</string><--comment--><string>b</string></resource> 这让我感到困惑,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

除了启用/禁用输出之外,您无法控制DOM如何格式化输出。您需要将XML作为字符串进行后处理,例如通过preg_replace

运行格式化的输出
$dom = new DOMDocument("1.0", "utf-8");
$root = $dom->appendChild($dom->createElement("resource"));
$root->appendChild($dom->createElement("string", "a"));
$root->appendChild($dom->createComment("comment here"));
$root->appendChild($dom->createElement("string", "b"));

$dom->formatOutput = true;
echo preg_replace('#</string>\s+<!--#', "</string><!--", $dom->saveXML());

正如ThW在评论中指出的那样:另一种选择是不启用formatOutputadd all the formatting you need through DOMNodes,例如使用空格添加DOMText元素。我觉得这样做有点难看,因为它们不会带有语义,它会使实际的DOM结构变得混乱。

但为什么你需要以这种特殊方式格式化它?格式化不会添加任何语义含义。注释是在字符串元素旁边还是在字符串元素下面并不重要。