在PHP中设置此XML的正确方法

时间:2013-04-01 17:42:28

标签: php xml

由于代码和说明中的错误而更新

我对XML很陌生,但在使用内置函数创建XML文件时,我正在坚持自己。

我可以像这样创建文件......

$xml['doc'] =       new DOMDocument('1.0', 'utf-8');

依此类推,输出如此...

<?xml version="1.0" encoding="utf-8"?>
<adf>
elements...
</adf>

我需要的是......

<?xml version="1.0" encoding="utf-8"?>
<?adf version="1.0"?>
<adf>
elements...
</adf>

正在寻找添加&lt; adf version =“1.0”的正确方法?&gt;?它不需要结束标记。我遵循所需的特定格式。特别是这里记录的ADF 1.0 .... http://en.wikipedia.org/wiki/Auto-lead_Data_Format

2 个答案:

答案 0 :(得分:3)

您所需的输出不是有效的XML,因为在<?xml ... ?>声明之前不允许任何内容。您的自定义内容将需要成为普通XML流的一部分。

答案 1 :(得分:3)

<?target content?>构造称为XML processing instruction

<?xml ?>是一个特例:它必须是文档中的第一件事。您的<?adf version="1.0" ?><?xml version="1.0"?>示例不是格式良好的XML。但是<?xml version="1.0"?><?adf version="1.0" ?>没问题。

您可以使用createProcessingInstruction

轻松创建处理说明
$doc = new DOMDocument('1.0', 'utf-8');
$pi = $doc->createProcessingInstruction('adf', 'version="1.0"');
$doc->appendChild($pi);
// you still need a root element to be well-formed
$doc->appendChild($doc->createElement('adf'));
echo $doc->saveXML();

此代码将打印以下内容:

<?xml version="1.0" encoding="utf-8"?>
<?adf version="1.0"?>
<adf/>

请注意,xml处理器不会解析处理指令的内容 - 它只是文本,如注释。如果你在其中使用类似xml的属性语法,则必须自己解析它。

在绝大多数情况下,使用真实元素和属性是比使用自定义处理指令更好的选择。 (ADF需要处理指令,因此在这种情况下你应该使用一个。)