Php XML验证:验证根目录没有匹配的全局声明
我创建了一个XML文件,但当我尝试根据XSD进行验证时,我一直遇到以下错误: 错误1845:元素 “{}数据包”: 验证根目录没有匹配的全局声明可用 PHP5.4.7libXML 2.7.8 我的职能:Php XML验证:验证根目录没有匹配的全局声明,php,xml,xsd,libxml2,Php,Xml,Xsd,Libxml2,我创建了一个XML文件,但当我尝试根据XSD进行验证时,我一直遇到以下错误: 错误1845:元素 “{}数据包”: 验证根目录没有匹配的全局声明可用 PHP5.4.7libXML 2.7.8 我的职能: public function validateXml($dokument){ // Enable user error handling libxml_use_internal_errors(true); $xml = new DOMDocument(); $
public function validateXml($dokument){
// Enable user error handling
libxml_use_internal_errors(true);
$xml = new DOMDocument();
$xml->load($dokument);
$tempFile = time() . '-' . rand() . '-document.tmp';
$xml->save($tempFile);
$tempDom = new DOMDocument();
$tempDom->load($tempFile);
// Delete temporary file.
if (is_file($tempFile))
{
unlink($tempFile);
}
if (!$tempDom->schemaValidate('order.xsd')) {
print '<b>DOMDocument::schemaValidate() Generated Errors!</b>';
$this->libxml_display_errors();
}
}
我的XSD文件:
我的XML文件:
<?xml version="1.0" encoding="Windows-1250"?>
<dat:dataPack id="ob001" ico="12345678" application="StwTest" version = "2.0" note="Import Objednávky"
xmlns:dat="http://www.stormware.cz/schema/version_2/data.xsd"
xmlns:ord="http://www.stormware.cz/schema/version_2/order.xsd"
xmlns:typ="http://www.stormware.cz/schema/version_2/type.xsd" >
<dat:dataPackItem id="OBJ001" version="2.0">
<ord:order version="2.0">
<!--prijata objednavka s polozkama-->
<ord:orderHeader>
<ord:orderType>receivedOrder</ord:orderType>
<ord:numberOrder>20140505A001</ord:numberOrder>
<ord:date>2014-10-14</ord:date>
<ord:dateFrom>2014-10-14</ord:dateFrom>
<ord:dateTo>2014-10-14</ord:dateTo>
<ord:text>Objednáváme u Vás zboží dle ústní dohody</ord:text>
<ord:partnerIdentity>
<typ:address>
<typ:company>Otma a.s.</typ:company>
<typ:division>Obchodní oddělení</typ:division>
<typ:name>Petr Novák</typ:name>
<typ:city>Brno</typ:city>
<typ:street>Nová 15</typ:street>
<typ:zip>61900</typ:zip>
<typ:ico>789456</typ:ico>
<typ:dic>CZ789456</typ:dic>
</typ:address>
</ord:partnerIdentity>
<ord:paymentType>
<typ:ids>hotově</typ:ids>
</ord:paymentType>
<ord:priceLevel>
<typ:ids>Sleva 1</typ:ids>
</ord:priceLevel>
</ord:orderHeader>
<ord:orderDetail>
<!--textova polozka-->
<ord:orderItem>
<ord:text>Sestava PC</ord:text>
<ord:quantity>1</ord:quantity>
<ord:delivered>0</ord:delivered>
<ord:rateVAT>high</ord:rateVAT>
<ord:homeCurrency>
<typ:unitPrice>200</typ:unitPrice>
</ord:homeCurrency>
</ord:orderItem>
<!--skladova polozka-->
<ord:orderItem>
<ord:quantity>1</ord:quantity>
<ord:delivered>0</ord:delivered>
<ord:rateVAT>high</ord:rateVAT>
<ord:homeCurrency>
<typ:unitPrice>198</typ:unitPrice>
</ord:homeCurrency>
<ord:stockItem>
<typ:stockItem>
<typ:ids>STM</typ:ids>
</typ:stockItem>
</ord:stockItem>
</ord:orderItem>
</ord:orderDetail>
<ord:orderSummary>
<ord:roundingDocument>math2one</ord:roundingDocument>
</ord:orderSummary>
</ord:order>
</dat:dataPackItem>
</dat:dataPack>
如果您的模式是以www.stormware.cz/schema/version_2/data.xsd上的模式文档为根的,那么为什么要使用表达式$tempDom->schemaValidate'order.xsd'进行验证 如果在局外人看来,您指向的“order.xsd”是或它的副本,那么您的代码不是指向您所说的架构文档,而是指向另一个架构文档,它描述了一个没有声明元素{}数据包的架构。这就是错误消息告诉您的 如果希望模式验证器根据数据包元素的声明验证输入,则必须确保模式包含该元素的声明 你的两个评论对我来说毫无意义 您说指向“order.xsd”符合规范。这是什么意思?如果您应该针对根植于…/order.xsd的模式编写有效的内容,那么为什么要使用该模式中未声明的元素,为什么要说您的模式位于?这根本不是同一个模式,任何浏览相关文档都会发现这一点 您还说,指向文件系统中的特定位置会导致错误消息,抱怨该位置的文件不是架构文档。位于的资源是一个模式文档;一个明显的猜测是,要么文件位置路径错误,要么您应该在彼此相关的适当位置拥有所有相关架构文档的副本,而您没有
在任何情况下,对你明显的问题的简短回答是什么出了问题?就是你没有成功地指向你说你打算使用的模式。修复该错误,错误消息将消失。这是根据规范进行的,如果我更改$tempDom->schemaValidate'data.xsd'错误1772:XML文档'C:\www\xxxxx\data.xsd'不是架构文档。第0行