2

XSDを使用してXMLドキュメントを逆シリアル化しようとしています。私が得ているエラーは次のとおりです。

「XMLドキュメントにエラーがあります(22、8)。」

InnerExceptionです_

"入力文字列は、正しい形式ではありませんでした。"

これで、サンプルXMLドキュメントの22行目に次のようになりました。

<PremiumPaymentDate>2012-08-08</PremiumPaymentDate>

私が見る限り、それは何も悪いことではありません。XSDは、次のようにこの行を同様に指定します。

<xs:element name="PremiumPaymentDate" type="xs:date" minOccurs="0"/>

そして、マップしようとしているプロパティは次のようになります。

[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="date")]
public System.DateTime PremiumPaymentDate {
    get {
        return this.premiumPaymentDateField;
    }
    set {
        this.premiumPaymentDateField = value;
    }
}

このフィールドを完全に削除し、XSDからコードファイルを再生成し、XSDを変更し、minOccurs値を変更し、フィールドの形式を変更し、フィールドデータを完全に削除しようとしましたが、何も機能していません。

また、22行目まですべてが機能するのも不思議です。これは、このフィールドの約17フィールド上で正常に機能し、一部はまったく同じ方法で設定された日付であるためです。これは、何らかの理由で解析したくないだけです。

編集:

これらの日付は機能します。これらは、ドキュメント内の問題の日付より上です。動作するXSDは次のとおりです。

<xs:element name="effectivedate" type="xs:date" minOccurs="1"/>

同じもののサンプルXMLは次のとおりです。

<effectivedate>2012-06-08</effectivedate>

そしてそのコードプロパティ:

[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="date")]
        public System.DateTime effectivedate {
            get {
                return this.effectivedateField;
            }
            set {
                this.effectivedateField = value;
            }
        }

何か案は?

4

1 に答える 1

0

前のノードが存在するかどうかを確認できますか?

おそらくエラーはこのノードにはありませんが、スキーマはこのノードの前に来る他のノードを期待していますが、存在しません。

たとえば、xsdが以下の場合

...
<xs:element name="someelsenode" type="xs:date" minOccurs="1"/>
<xs:element name="missingnode" type="xs:date" minOccurs="1"/>
<xs:element name="effectivedate" type="xs:date" minOccurs="1"/>
...

しかし、あなたのxmlは以下のようになります

...
<someelsenode>2012-06-08</someelsenode>
<effectivedate>2012-06-08</effectivedate>
...

「XML 文書にエラーがあります (22, 8)」と表示されます。エラー。これは正しいノードの行と列を参照しますが、実際には、他のノードがそこにないことを言おうとしています。

だからあるに<effectivedate>2012-06-08</effectivedate>違いない前に<missingnode>2012-06-08</missingnode>

于 2012-10-19T17:52:11.900 に答える