1

この xml を解析できません。誰でもこれで何が間違っているのか教えてください

ここに私のXMLファイルがあります

<?xml version="1.0" encoding="UTF-8"?>
<gea-sr:GETOFFERSResponse 
  xmlns:gea-sr="http://schemas.com/soap/requests" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://schemas.com/soap/requests 
                      file:///C:/Users/Desktop/SMCWebResponse.xsd">
    <requestdate dateDescription="Wed" requestdate="2012-12-19"/>
    <requestdate dateDescription="Mon" requestdate="2012-12-24">
        <offer timeperiod="0800-1200" timeperioddesc="AM 8-12">
            <offertoken/>
            <offertext>12657131N3AM 0004 T000000000N</offertext>
            <offerremarks/>
            <offerflag>F</offerflag>
        </offer>
        <offer timeperiod="1300-1700" timeperioddesc="PM 1-5">
            <offertoken/>
            <offertext>12657131N3AA 0006 T000000000N</offertext>
            <offerremarks/>
            <offerflag>F</offerflag>
        </offer>
    </requestdate>
</gea-sr:GETOFFERSResponse>"

解析に使用しようとしている XSD スナップショットを次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:gea-sr="http://schemas.com/soap/requests" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xsd:complexType name="requestdateType">
        <xsd:sequence>
            <xsd:element name="offer" type="offerType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="requestdate" type="xsd:date"/>
        <xsd:attribute name="datedescription">
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:maxLength value="10"/>
                    <xsd:whiteSpace value="collapse"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:attribute>
    </xsd:complexType>

<xsd:complexType name="offerType">
        <xsd:all>
            <xsd:element name="offertoken" type="offertokenType"/>
            <xsd:element name="offertext" type="offertextType"/>
            <xsd:element name="offerremarks" type="offerremarksType"/>
            <xsd:element name="offerflag" type="offerflagType"/>
        </xsd:all>
        <xsd:attribute name="timeperiod" type="timespanType"/>
        <xsd:attribute name="timeperioddescription">
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:maxLength value="25"/>
                    <xsd:whiteSpace value="collapse"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:attribute>
    </xsd:complexType>

<xsd:simpleType name="timespanType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="0800-1200"/>
            <xsd:enumeration value="1300-1700"/>
            <xsd:enumeration value="0800-1700"/>
            <xsd:enumeration value="1000-1700"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="offertokenType">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="50"/>
            <xsd:whiteSpace value="collapse"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="offertextType">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="50"/>
            <xsd:minLength value="19"/>
            <xsd:whiteSpace value="collapse"/>
            <xsd:pattern value="[^\s].*"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="offerremarksType">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="50"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="offerflagType">
        <xsd:restriction base="xsd:string">
            <xsd:whiteSpace value="collapse"/>
            <xsd:enumeration value="A"/>
            <xsd:enumeration value="F"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:element name="GETOFFERSResponse">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="requestdate" type="gea-sr:requestdateType" maxOccurs="unbounded" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

エラー cvc-elt.5.2.1 が表示されます: 実際の型定義 '{anonymous}' に関して要素が有効ではありません。cvc-model-group: element のタイプ '{anonymous}' では予期しない要素です。

4

1 に答える 1

1

[まず、用語の問題: ここで XML 文書を解析するのに問題はありません。あなたの XML は完全に整形式であり、XML パーサーはそれを解析するのに何の問題もありません。XML ドキュメントの検証で問題が発生しています。この違いは、一部のユーザーにとっては衒学的な印象を与えますが、このような質問に答えることができる可能性が高い人々にとっては重要であるため、違いを理解することはあなたの関心事です.]

ここにはいくつかの問題があります。

  • XML インスタンスでは、要素 gea-sr:GETOFFERSResponse は名前空間http://schemas.com/soap/requestsにあります。ただし、表示する XSD スキーマ ドキュメントでは、名前空間にまったく割り当てられていない GETOFFERSResponse という名前の要素が宣言されています (スキーマ ドキュメントにはターゲット名前空間がありません)。

  • スキーマ ドキュメントに追加targetNamespace="http://schemas.com/soap/requests"すると、スキーマ ドキュメント内の宣言が接頭辞なしの名前を使用して多くの型を参照するため、問題が発生します (そのため、名前空間名のない型への参照になります)。

  • 適切な参照にプレフィックスを追加するgea-srと、これらのエラーが解消され、ここで 3 番目の問題の原因につながります。スキーマでは、ローカル要素がターゲット名前空間にあると指定されていますが、ドキュメント インスタンスでは、GETOFFERSResponse の子は名前空間で修飾されていません。GETOFFERSResponse の子を gea-sr 名前空間に配置するか、スキーマにelementFormDefault = "unqualified".

  • ここで、型定義では要素 requestdate に対して datedescription という名前の属性が宣言されていますが、インスタンスでは dateDescription という名前の属性が使用されていることがわかります。offer 要素には、スキーマに timeperioddescription という名前の属性がありますが、XML インスタンスには timeperioddesc という名前の属性があります。

    これらの問題は、スキーマとインスタンスを一致させることで解決できます。

これらの問題が解決されると、XML ドキュメント インスタンスは有効になります。

于 2012-12-20T18:28:36.023 に答える