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 に答える