2012-04-05 11 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を使用します。あなたのXMLファイル内の 'xsi:schemaLocation'は間違っていますが、おそらくタイプミングの問題でしょうか? – MiMo

答えて

0

本当に面白いです。

$dom->loadXML($dom->saveXML) - これは私の問題で私を助けるコードの一部です。

+1

少なくとも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パラメータが必要かどうかはわかりません。

関連する問題