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 回答