2012-04-05 2 views
1

Когда я проверить следующий XML: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> 

Я получаю эту ошибку:

Error: 1845 Element 'AvailRateUpdateRQ': No matching global declaration available for the validation root.

+0

Работает для меня - с помощью Visual Studio 2010 для проверки. «Xsi: schemaLocation» в вашем XML-файле выглядит неправильно - но, может быть, это проблема с типизацией? – MiMo

ответ

0

Действительно очень смешно.

$dom->loadXML($dom->saveXML) - это часть кода, которая помогает мне в моей проблеме.

+1

Существует, по крайней мере, еще один аналогичный отчет, по-видимому, связанный с версией libXML: http://www.php.net/manual/en/domdocument.schemavalidate.php#89893 FWIW, я также вижу то же поведение , – asmecher

+0

И я решил это, используя примерно то же самое решение, что и верхний проголосовавший ответ выше. Как правило, вам нужно следовать инструкциям на странице http://php.net/manual/en/domdocument.createelementns.php, чтобы правильно создать элемент с пространством имен, а не самостоятельно устанавливать атрибут xmlns, который, похоже, не работает. Является ли это ошибкой libxml или нет, это другой вопрос. – asmecher

4

У меня возникла аналогичная проблема. Вы вручную генерируете свой XML? Я был, и проблема в том, что, когда я добавил xmlns="Shema Info", это фактически не создавало пространство имен на корневом узле так же, как это делает анализатор при чтении в файле. Таким образом, мой созданный корневой узел не был в пространстве имен, поэтому он не соответствовал корневому узлу в проверяющей схеме.

Я использовал libxml2, поэтому вызовы были разными. Но при установке атрибута Xmlns на узле, вместо этого я сделал:

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

par является родителем, и val является пространство имен URL. Я не уверен, нужен ли параметр par для первого вызова.

Смежные вопросы