DataSet.ReadXml - 如何捕捉“输入字符串的格式不正确”

Posted

技术标签:

【中文标题】DataSet.ReadXml - 如何捕捉“输入字符串的格式不正确”【英文标题】:DataSet.ReadXml - How to catch "input string was not in a correct format" 【发布时间】: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); 【参考方案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();
    

【讨论】:

以上是关于DataSet.ReadXml - 如何捕捉“输入字符串的格式不正确”的主要内容,如果未能解决你的问题,请参考以下文章

C#操作XML文档总结

c# 中,如何读取XML文件,并将读取到的内容显示到TreeView中

如果列索引 0 包含特定字符串 C#,如何隐藏整个 DataGridview 行

用户说话时如何捕捉语音输入

PhoneGap 捕捉 iPhone 的“Go”按下事件

jquery的chosen控件,怎样才能捕捉到input的输入事件