读取XML到数据表的FormatException

本文关键字:FormatException 数据表 XML 读取 | 更新日期: 2023-09-27 18:15:09

我使用函数Datatable . readxml (TextReader)将XML转换为数据表,代码如下:

DataTable table = new DataTable("Document");
... (Add the Columns to the Table)
TextReader textReader = new StringReader(xmlString);
table.ReadXml(textReader);

xml是从其他服务器生成的。(DMS)

这在几乎所有机器上都可以正常工作。但是在一台windows 8.1计算机上,该表达式抛出以下错误:

System.FormatException: Die Eingabezeichenfolge hat das falsche Format.
   bei System.Number.ParseSingle(String value, NumberStyles options, NumberFormatInfo numfmt)
   bei System.Single.Parse(String s, NumberStyles style, IFormatProvider provider)
   bei System.Xml.XmlConvert.ToSingle(String s)
   bei System.Data.Common.SingleStorage.ConvertXmlToObject(String s)
   bei System.Data.XmlDataLoader.LoadColumn(DataColumn column, Object[] foundColumns)
   bei System.Data.XmlDataLoader.LoadTable(DataTable table, Boolean isNested)
   bei System.Data.XmlDataLoader.LoadData(XmlReader reader)
   bei System.Data.DataTable.ReadXml(XmlReader reader, Boolean denyResolving)

通过尝试和错误测试,我发现,发生了以下问题:在一个XML节点中有yyyy-MM-dd格式的日期。不知何故,ReadXml方法无法在特定机器上解析此日期。

两个机器(工作和不工作)上的文化是:Thread.CurrentThread.CurrentCulture: de-CHThread.CurrentThread.CurrentUICulture: de-DE

当我在不工作的系统上更改系统文化为en-CA时。

问题是什么?我怎么解它?

下面是一个XML示例:XML看起来像:
<?xml version="1.0" encoding="utf-16"?>
<DocumentInfo>
    <DocumentList>
        <DocCount>1</DocCount>
        <FoundMore>False</FoundMore>
        <Document>
            <DocID>KG0000001</DocID>
            <DocType>01. Administration</DocType>
            <DocTypeShort>DADMI</DocTypeShort>
            <DocNumber>B_10000</DocNumber>
            <LastReleasedVersion>0</LastReleasedVersion>
            <ImportDate>2014-05-22</ImportDate>
            <DocState>Freigabe</DocState>
            <FileType>PDF</FileType>
            <FileSizeBytes>678617</FileSizeBytes>
            <FileSizeKB>662.71</FileSizeKB>
            <OriginalFilename>B_10000</OriginalFilename>
            <DocChangedAt>2014-05-22</DocChangedAt>
            <Origin/>
            <dok_dat_feld_1>39099</dok_dat_feld_1>
            <dok_dat_feld_2>11364</dok_dat_feld_2>
            <dok_dat_feld_3>Anträge</dok_dat_feld_3>
            <dok_dat_feld_4>Fragen.pdf</dok_dat_feld_4>
            <dok_dat_feld_9>männlich</dok_dat_feld_9>
            <dok_dat_feld_12>6.41.11.72</dok_dat_feld_12>
            <dok_dat_feld_13>Nein</dok_dat_feld_13>
            <dok_dat_feld_21>Jxxx</dok_dat_feld_21>
            <dok_dat_feld_50>2013-11-27</dok_dat_feld_50>
            <dok_dat_feld_51>2014-04-08</dok_dat_feld_51>
            <dok_dat_feld_54>2014-05-22</dok_dat_feld_54>
        </Document>
    </DocumentList>
</DocumentInfo> 

读取XML到数据表的FormatException

你可以这样做:

DataTable table = new DataTable();
table.Locale = CultureInfo.InvariantCulture;

另一种解决方案似乎是改变XML的创建,使用等效的WriteXml