PHP符合XML Conform Linebreak

时间:2012-08-14 16:08:09

标签: php xml validation xsd

我正在进行XML生成,其中主要数据来自xsl转换(但这不是问题,这只是我不使用PHP DOM或SimpleXML的原因)。

像这样:

$xml =  '<?xml version="1.0" encoding="utf-8"?>' . PHP_EOL;
$xml .= '<rootElement>';

foreach($xslRenderings as $rendering) {
    $xml .= $rendering;
}

$xml .= '</rootElement>';

生成的XML在此处http://www.freeformatter.com/xml-validator-xsd.htmlhttp://xsdvalidation.utilities-online.info/对其XSD进行验证。

但在这里失败:http://www.xmlforasp.net/schemavalidator.aspx

Unexpected XML declaration. The XML declaration must be the first node in the 
document, and no white space characters are allowed to appear before it. 
Line 2, position 3.

如果我手动删除PHP_EOL生成的换行符并按回车键,则验证。

我认为,这是最后一个模式验证器中的错误。或者是PHP_EOL(或PHP中的手动中断)某些验证器的问题?如果是,如何解决?

我问,因为生成的XML将发送到.NET服务,最后一个验证器是用.NET构建的。

修改

XML看起来像这样,可以在http://cb.heimat.de/interface/schema/interfaceformat.xsd

找到Scheme
<?xml version="1.0" encoding="utf-8"?>
<dataset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://cb.heimat.de/interface/schema/interfaceformat.xsd">
<production foreignId="1327" id="0" cityId="6062" productionType="3" subCategoryId="7013" keywords="" productionStart="" productionEnd="" url=""><title languageId="1">
...
</production>

1 个答案:

答案 0 :(得分:1)

您必须将生成的XML视为二进制流,以了解正在发生的事情。我会试着解释你应该看什么......

我将向您展示一个无效XML(与您的类似)的转储,以帮助说明:

enter image description here

前三个字节是字节顺序标记,可能遇到文本文件和流(在本例中为UTF-8)。这些字节永远不会导致兼容的XML解析器跳闸,因为它被用作理解编码方案的提示。

接下来的两个字节(0x0D0A)是Windows平台上的新行。那些应该导致任何XML解析器失败良好的规则。根据当前的XML 1.0标准,在XML声明之前不允许使用空格。

在.NET上,您将收到一个错误,例如您描述的错误。 Java(基于xerces)会说更神秘的东西:The processing instruction target matching "[xX][mM][lL]" is not allowed. [2]

在第一个 < 之前删除任何空白区域应修复此错误消息。您所要做的就是了解白色空间是如何到达那里的......

根据您的描述,在使用XML之前,XML PI会以某种方式被删除。