【问题标题】:DataSet.ReadXml - How to catch "input string was not in a correct format"DataSet.ReadXml - 如何捕捉“输入字符串的格式不正确”
【发布时间】:2017-05-12 03:28:50
【问题描述】:

我正在使用DataSet.ReadXML()从 XML 文件中读取一些数据

我的调用看起来像这样(其中XmlFileName 是一个string,带有一个 XML 文件的路径):

this.dataSet.ReadXml(XmlFileName, XmlReadMode.InferTypedSchema);

这段代码之前使用了XmlReadMode.Auto,但是我们在处理数据类型的方式上遇到了问题。我们已经成功使用 InferTypedSchema 几个星期了。最近我们遇到了几个问题。

我将问题归结为:我们的 XML 文件中有一个名为“Product_UPC”的字段

这个字段总是(希望)包含数字。我们刚刚在该字段中收到一个末尾带有空格的值,所以它类似于 "123456"

ReadXml() 带有InferTypedSchema 参数不喜欢这样,并在内部抛出异常"The input string was not in a correct format"

我假设由于之前的“Product_UPC”值在 XML 文件中被解释为数字,因此 .NET 现在也将同一字段的所有未来值转换为数字。

由于可以出于多种原因引发错误"The input string was not in a correct format",因此我不能假设问题出在 UPC 本身,我也不知道 XML 文件中的确切值有什么问题需要报告给用户。这些文件最终有 10,000 多行,因此不太可能要求用户扫描尾随空格。

任何帮助或想法都会很棒。

【问题讨论】:

  • 发布架构 (.xsd) 并在创建 DataSet 之前对其进行验证。这将允许您在尝试将 xml 文件中的数据加载到 DataSet 之前验证其格式是否正确。这也有可能为您提供一个问题列表以向用户报告。
  • 看起来您可能在 123456 之后有一个空格。您是否使用嵌入式架构保存了 xml?您是否检查了架构以查看类型是字符串还是整数?您可以按如下方式将架构添加到 xml:ds.WriteXml(fileName, XmlWriteMode.WriteSchema);

标签: c# .net xml dataset


【解决方案1】:

我建议您使用 System.Xml.Linq.XElement 和存储库模式。您可以使 Position 类与 xml 文件中的位置标记相同。您可以读取文件并填写 Position 对象或列表。一个简单的例子

    class Position { }
class Repository
{
    private XElement xlmRecords;
    public Repository(string filePath)
    {
        xlmRecords = XElement.Load(filePath);
    }
    public List<Position> FindAll()
    {
        return xlmRecords.Elements("position")
            .Select(position =>
            {
                return new Position
                {
                    //You fill the Position properties view xml position values
                };
            }).ToList();
    }
}

【讨论】:

    猜你喜欢
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2013-08-22
    相关资源
    最近更新 更多