【问题标题】:DataSet.ReadXml - Error “input string was not in a correct format”DataSet.ReadXml - 错误“输入字符串的格式不正确”
【发布时间】:2021-05-19 06:21:48
【问题描述】:

代码有两个输入

  1. XML 文件
  2. XSD 文件

XML 内容

<MyFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <Attribute>
      <AttributeName>Text1</AttributeName>
      <AttributeContent>1</AttributeContent>
  </Attribute>
  <Attribute>
      <AttributeName>Text1</AttributeName>
      <AttributeContent>1</AttributeContent>
  </Attribute>
</MyFile> 

这个对应的XSD内容

<?xml version="1.0"?>
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="MyFile">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" name="Attribute">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" name="AttributeName" type="xs:string" />
              <xs:element minOccurs="0" name="AttributeContent" type="xs:decimal" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

要在 C# 中读取 XML 文件,我正在使用

            DataSet ds = new DataSet();
            ds.ReadXmlSchema(new MemoryStream(xmlSourceModel.File2Content));

            foreach (DataTable tab in ds.Tables)
            {
                tab.BeginLoadData();
            }
            ds.ReadXml(new MemoryStream(xmlSourceModel.File1Content));

            foreach (DataTable tab in ds.Tables)
            {
                tab.EndLoadData(); 
            }

在此之后,我期待数据集中的数据。它确实有效。

问题: 如果我使用如下 XML 内容

 <Attribute>
      <AttributeName>Text1</AttributeName>
      <AttributeContent></AttributeContent>
  </Attribute>

这里注意 AttributeContent 不包含值。

在这种情况下ds.ReadXml() 方法给出错误 “输入字符串的格式不正确。”

我们如何解决这个错误,以便我们可以选择空数据?

我们可以放一些默认数据来避免这个错误吗?

【问题讨论】:

  • 您的 AttributeContent 元素是十进制类型,不能留空。如果您不想填充元素,则需要跳过它。这是允许的,因为您将其定义为 minoccurs = 0
  • @martijn 我已经在 XSD 中添加了 minoccurs=0,它仍然显示相同的错误。
  • 是的,您仍然会收到错误消息,因为您需要从消息中删除属性内容以对其进行验证。 minoccurs=0 允许您将 排除在外。

标签: c# xml xsd dataset


【解决方案1】:

基本上,在这种情况下,XML 文件现在是正确的。

解决方法1.不要添加不包含值的属性

<Attribute>
      <AttributeName>Text1</AttributeName>
  </Attribute>

解决方案 2, 添加 xsi:nil="true" 这样的东西

 <Attribute>
      <AttributeName>Text1</AttributeName>
      <AttributeContent xsi:nil="true"></AttributeContent>
  </Attribute>

【讨论】:

    猜你喜欢
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    相关资源
    最近更新 更多