1

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

4

3 回答 3

4

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

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

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

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

于 2012-09-26T21:48:59.997 回答
0

真的非常好笑。

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

于 2012-04-17T13:49:27.920 回答
0

尝试使用\XMLReaderfor 验证,而不是\DOMDocument.

于 2018-11-13T11:16:16.287 回答