由于代码和说明中的错误而更新
我对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
答案 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需要处理指令,因此在这种情况下你应该使用一个。)