gpt4 book ai didi

c# - 处理不良 xml 数据的正确方法

转载 作者:行者123 更新时间:2023-11-30 22:50:59 25 4
gpt4 key购买 nike

我有一个小的 c# windows 服务,它定期从 Web 服务中提取 xml 并将数据存储在数据库表中。

不幸的是,它失败了,因为 Web 服务中偶尔有错误数据 - 字符串而不是小数。我对 Web 服务没有任何控制权(来 self 们无法更改的软件的未经验证的用户输入),但我想记录错误数据,以便可以重新输入。

这是简单的数据,看起来像这样:

<ROWS>
<ROW>
<COL1>5405</COL1>
<COL2>102.24</COL1>
</ROW>
<ROW>
<COL1>5406</COL1>
<COL2>2.25</COL1>
</ROW>
</ROWS>

表格只有两列,COL1 (NUMBER, 10), COL2 (NUMBER, 10,2)。

我正在使用验证 XmlReader 和这个 XSD:

 <?xml version="1.0" encoding="utf-8"?>
<xs:schema id="ROWS" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="ROWS" msdata:IsDataSet="true" msdata:Locale="en-US">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="ROW">
<xs:complexType>
<xs:sequence>
<xs:element name="COL1" type="xs:decimal" minOccurs="0" />
<xs:element name="COL2" type="xs:decimal" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>

然后是 dataset.ReadXml() 和 Update()ing 数据集。

每当遇到错误数据时,我都会收到以下异常:

System.Xml.Schema.XmlSchemaValidationException was unhandled

Message="The 'COL1' element is invalid - The value 'A40' is invalid according to its datatype 'http://www.w3.org/2001/XMLSchema:decimal' - The string 'A40' is not a valid Decimal value."

我可以想出几种方法来解决这个问题,但它们都感觉有点笨拙,我想学习更优雅的东西,并提高我的知识。到目前为止,这是我的想法:

  • 在加载到验证 XML 读取器之前预处理网络服务提供的 XML,完全删除所有坏节点。
  • 捕获 XmlSchemaValidationExceptions 并尝试优雅地从它们继续(不确定那个)
  • 不要使用验证 XML 阅读器,而是在将未经验证的 xml 加载到数据集中时捕获异常。 (再次不确定)
  • 数据集中有字符串列,在我更新它之前忽略坏数据,并捕获数据库拒绝的任何内容。
  • 拿着大木槌站在用户身边,直到他们学会一次就做对(太费时了)
  • 还有别的吗?

更新:数据可能是错误的,因为它来自未验证 COL1 的用户输入的应用程序 - 但 COL2 中的数字计算正确,并且 COL1 应对应于不同的系统。应记录任何无效条目,以便更正它们。数据写入数据库后,另一个系统验证 COL1 是否有效,如果它在另一个系统中显示不正确,用户很快就会发现 - 他们过去总是手动加载它:)

最佳答案

Pre-process the XML provided by the web service before loading into the validating XML reader, removing any bad nodes entirely.

这是我会选择的选项,它允许您在异常发生之前抓取错误的输入并将其存储在某个地方以便以后查看。然后你可以找到违规用户并使用你的另一种方法

go and stand over the users with a large mallet until they learn to get it right first time

关于c# - 处理不良 xml 数据的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/250850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com