0

我正在使用simpleXMLElement创建一个新的 xml 文件。我想创建类似于以下内容的内容:

<?xml version="1.0"?>
<command type="scenario" name="test">
    <game type="play" filename="google">
    </game>
</command>

我正在使用此代码,但有些地方不正确:

<?php

$xml = new SimpleXMLElement("<?xml version=\"1.0\" ?><command type='scenario'></command>"); 
$xml->addAttribute('name', 'test');
$game = $xml->addChild('game');
$game->addAttribute('type', 'play');
$game->addAttribute('filename', 'google');

// checking the output
$handler = fopen(sad.xml, 'w');
fwrite($handler, $xml->asXML());
fclose($handler);

?>

但这是我在sad.xml文件中看到的输出:

<?xml version="1.0"?>
<command type="scenario" name="test"><game type="play" filename="google"/></command>

为什么?

  1. 文件中没有出现新行
  2. 游戏标签没有</game>结束标签
4

2 回答 2

0

@lexicus 解释了如何实现所需的输出。在回答您的问题“为什么?”时,您的示例文件和 SimpleXML 输出之间在逻辑上没有区别:

  1. XML 解析器忽略标签之间的空白。两个标签是相邻的 ( <tag1><tag2/></tag1>) 还是被 57,392,391 个空行隔开都没有关系;所有解析器将看到的是 XML 元素。
  2. <game/>只是<game></game>. />明确表示它是一个空标签。

您不是在 SimpleXML 中编写文档;您正在构建一个 XML 树。当你调用->asXML()它时,它会以最简单的方式写出树。

于 2013-06-06T18:23:05.007 回答
0

尝试这个。

$game = new SimpleXMLElement('', LIBXML_NOEMPTYTAG);    
$xml->addChild($game);

你可以在这里找到格式化输出的解决方案PHP simpleXML 如何以格式化的方式保存文件?

于 2013-06-06T17:59:56.843 回答