0

由于代码和描述错误而更新

我对 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>

正在寻找添加 <adf version="1.0"?> 的正确方法?它不需要结束标签。我遵循所需的特定格式。特别是此处记录的 ADF 1.0.... http://en.wikipedia.org/wiki/Auto-lead_Data_Format

4

2 回答 2

3

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

于 2013-04-01T17:45:59.210 回答
3

<?target content?>构造称为XML 处理指令

<?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 需要一个处理指令,所以在这种情况下当然应该使用一个。)

于 2013-04-01T18:01:42.730 回答