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文件,并将读取到的内容显示到TreeView中