簡體   English   中英

XML 驗證:“沒有匹配的全局聲明可用於驗證根”錯誤

[英]XML validation: 'No matching global declaration available for the validation root' error

當我驗證以下 xml 時:

<?xml version="1.0" encoding="UTF-8"?>
<AvailRateUpdateRQ xmlns="http://www.expediaconnect.com/EQC/AR/2011/06"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://www.expediaconnect.com/EQC/AR/2011/06  ./XSD/AvailRateUpdateRQ.xsd">
  <Authentication username="user" password="ECLPASS"/>
  <Hotel id="111"/>
  <AvailRateUpdate>
    <DateRange from="2012-04-05" to="2012-04-07"/>
    <RoomType id="01">
      <Inventory totalInventoryAvailable="10"/>
      <RatePlan id="52ASD">
        <Rate currency="EUR">
          <PerDay rate="185.00"/>
        </Rate>
        <Restrictions minLOS="2" maxLOS="3" closedToArrival="true"/>
      </RatePlan>
    </RoomType>
  </AvailRateUpdate>
</AvailRateUpdateRQ>

使用此架構:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2011 Expedia, Inc. All Rights Reserved -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns="http://www.expediaconnect.com/EQC/AR/2011/06" 
  targetNamespace="http://www.expediaconnect.com/EQC/AR/2011/06" 
  elementFormDefault="qualified" 
  attributeFormDefault="unqualified" 
  version="2.0.0">

  <xs:element name="AvailRateUpdateRQ">
      <xs:complexType>
         <!-- Definitions of some other element there -->
      </xs:complexType>
  </xs:element>

我收到此錯誤:

錯誤:1845 元素“AvailRateUpdateRQ”:沒有可用於驗證根的匹配全局聲明。

我遇到了類似的問題。 您是手動生成 XML 嗎? 我是,問題是當我添加xmlns="Shema Info"時,它實際上並沒有像解析器在讀取文件時那樣在根節點上設置名稱空間。 所以我生成的根節點不在名稱空間中,因此它與驗證模式中的根節點不匹配。

我使用的是 libxml2,所以調用是不同的。 但是在節點上設置 xmlns 屬性時,我改為:

ns = xmlNewNs(par, val, NULL);
xmlSetNs(par, ns);

par是parent, val是namespace url,不知道第一次調用是否需要par參數。

真的很有趣。

$dom->loadXML($dom->saveXML) - 這是幫助我解決問題的代碼的一部分。

嘗試使用\XMLReader進行驗證,而不是\DOMDocument

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM