XML验证:'没有可用于验证根的匹配全局声明'错误

时间:2012-04-05 16:09:25

标签: php xml validation xsd

当我验证以下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':验证根目录没有可用的匹配全局声明。

3 个答案:

答案 0 :(得分:4)

我遇到了类似的问题。您是否手动生成XML?我当时的问题是,当我添加xmlns="Shema Info"时,实际上并没有像解析器在读取文件时那样在根节点上设置名称空间。所以我生成的根节点不在名称空间中,因此它与验证模式中的根节点不匹配。

我使用的是libxml2,因此调用不同。但是在节点上设置xmlns属性时,我做了:

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

par是父级,val是名称空间网址。我不确定第一次通话是否需要par参数。

答案 1 :(得分:0)

真的很好笑。

$dom->loadXML($dom->saveXML) - 这部分代码可以帮助解决我的问题。

答案 2 :(得分:0)

尝试使用\DOMDocument而不是var searchArray = [( ean: String, name: String, weight: String, brand: String, percent: String, inside: String, img: String, packet: String, date: String) ]() var searchArrayFiltered = [( ean: String, name: String, weight: String, brand: String, percent: String, inside: String, img: String, packet: String, date: String) ]() 进行验证。