我使用函数datatable.ReadXml(TextReader)将XML转换为Datatable,代码如下:
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的日期。不知何故,Method ReadXml无法在特定计算机上解析此日期。
两种(工作和不工作)机器的文化是: Thread.CurrentThread.CurrentCulture:de-CH Thread.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>
答案 0 :(得分:0)
你可以通过这样做来解决它:
DataTable table = new DataTable();
table.Locale = CultureInfo.InvariantCulture;
另一个解决方案似乎是将XML的创建更改为使用WriteXml等效。