当前位置: 首页 > 知识库问答 >
问题:

XML验证:验证根目录没有匹配的全局声明

柳梓
2023-03-14

我创建了一个XML文件,但是当我试图对XSD进行验证时,我一直收到以下错误:

错误1845:元素{http://www.stormware.cz/schema/version_2/data.xsd}dataPack:验证根没有匹配的全局声明。

PHP5.4。7 libxml2.7。8.

我的职能:

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文件:www.stormware。cz/schema/version_2/data。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>

共有1个答案

萧心远
2023-03-14

如果您的模式是植根于www.stormware.cz/schema/version_2/data.xsd的模式文档中的模式,那么为什么要使用表达式$temDom-进行验证?

如果(在外人看来)你指向的order.xsd是http://www.stormware.cz/schema/version_2/order.xsd(或它的副本),那么你的代码不是指向你所说的模式文档,而是指向不同的模式文档模式文档,描述其中未声明元素{http://www.stormware.cz/schema/version_2/data.xsd}dataPack的模式。这是错误消息告诉你的。)

如果您希望模式验证器根据dataPack元素的声明验证您的输入,您必须确保模式包含该元素的声明。

(你的两个评论对我来说毫无意义。

你指的是“秩序”。xsd“符合规范”。这是什么意思?如果您应该根据根于/顺序xsd,为什么要使用一个未在该模式中声明的元素(为什么要说您的模式处于http://www.stormware.cz/schema/version_2/data.xsd?这根本不是同一个模式,任何浏览相关文档都会发现这一点。

您还说,指向文件系统中的特定位置会导致错误消息,抱怨该位置的文件不是模式文档。http://www.stormware.cz/schema/version_2/data.xsd的资源是一个模式文档;一个明显的猜测是,您要么弄错了文件位置路径,要么您应该在彼此相对的适当位置拥有所有相关模式文档的副本,并且你不知道。)

无论如何,对你明显问题的简短回答(“出了什么问题?”)你没有成功地指向你说你打算使用的模式。修复这个问题,你的错误信息就会消失。

 类似资料:
  • 我试图为以下XML文档创建一个XML模式。https://www.nationalbanken.dk/_vti_bin/DN/DataService.svc/CurrencyRatesHistoryXML?lang=en 然后,我在记事本上安装了XML工具插件,并尝试重新验证模式中的XML文档。 要验证的XML 但当我尝试验证模式时,我收到以下验证错误: 使用XML架构验证当前文件:错误:元素'{

  • 我正在尝试用xsd文件验证xml文件,以便为加拿大税务局提交T2202税单 下面是我的xml文件,可以稍微修改一下,以便用xsd模式文件进行验证。 请在下面找到我的xsd模式文件,它来自政府网站。 我需要验证xml文件。可以对xml文件进行轻微更改。我得到下面的错误 错误:元素“Return”:验证根目录没有匹配的全局声明

  • 使用名称空间时引用模式时的正确语法是什么? 问题 使用给定的架构创建XML文档。

  • 看起来,当我这样使用thenReturn时: 当(abc.call())。然后返回(a)。然后返回(b), 我期望: 验证(abc,次(2))。调用() 相反,该方法似乎只被调用了一次,我有点困惑(我的测试工作如预期的那样,mock似乎返回了我预期的值),但对于调用次数,我不知道我是否得到了错误的结果,或者这是Mockito的预期行为?

  • 主要内容:形式良好的 XML 文档,验证 XML 文档,XML DTD,XML Schema,一个通用的 XML 验证器拥有正确语法的 XML 被称为"形式良好"的 XML。 通过 DTD 验证的XML是"合法"的 XML。 形式良好的 XML 文档 "形式良好"的 XML 文档拥有正确的语法。 在前面的章节描述的语法规则: XML 文档必须有一个根元素 XML元素都必须有一个关闭标签 XML 标签对大小写敏感 XML 元素必须被正确的嵌套 XML 属性值必须加引号 <?xml version=

  • DatabaseError:ORA-28040:没有匹配的身份验证协议