【问题标题】:XML validation: 'No matching global declaration available for the validation root' errorXML 验证:“没有可用于验证根的匹配全局声明”错误
【发布时间】:2012-04-19 09:35:23
【问题描述】:

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

【问题讨论】:

  • 为我工作 - 使用 Visual Studio 2010 进行验证。您的 XML 文件中的 xsi:schemaLocation 看起来有问题 - 但可能只是打字问题?

标签: php xml validation xsd


【解决方案1】:

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

我使用的是 libxml2,所以调用不同。但是在节点上设置 xmlns 属性时,我改为:

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

par 是父级,val 是命名空间 url。我不确定第一次调用是否需要par 参数。

【讨论】:

    【解决方案2】:

    真的很有趣。

    $dom-&gt;loadXML($dom-&gt;saveXML) - 这是帮助我解决问题的代码的一部分。

    【讨论】:

    【解决方案3】:

    尝试使用\XMLReader 代替\DOMDocument 进行验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 2012-01-15
      • 1970-01-01
      相关资源
      最近更新 更多