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

Php XML验证:';没有匹配的全局声明可用于验证根';错误,php,xml,validation,xsd,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/20

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

真的很有趣

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

真的很有趣


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

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

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

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

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

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

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

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

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

尝试使用
\XMLReader
进行验证,而不是
\DOMDocument

尝试使用
\XMLReader
进行验证,而不是
\DOMDocument

对我有效-使用Visual Studio 2010进行验证。XML文件中的
xsi:schemaLocation
看起来是错误的,但可能只是一个键入问题?对我来说很有效-使用Visual Studio 2010进行验证。XML文件中的
xsi:schemaLocation
看起来是错误的-但可能只是键入问题?至少还有一个类似的报告,显然与libXML:FWIW版本有关,我也看到了相同的行为。我使用了与上面投票结果大致相同的解决方案来解决这个问题。基本上,您需要按照中的说明正确创建具有名称空间的元素,而不是自己设置xmlns属性,这似乎不起作用。这是否是libxml错误是另一个问题。至少还有一个类似的报告,显然与libxml:FWIW的版本有关,我也看到了同样的行为。我使用与上面投票结果大致相同的解决方案解决了这个问题。基本上,您需要按照中的说明正确创建具有名称空间的元素,而不是自己设置xmlns属性,这似乎不起作用。这是否是libxml错误是另一个问题。