C# 无法使用架构分析XML中的空小数/整数
我在这里感到困惑。。。试图解析一个带有模式的简单XML文件时,我遇到了错误 下面是一个简单的代码:C# 无法使用架构分析XML中的空小数/整数,c#,xml,parsing,schema,decimal,C#,Xml,Parsing,Schema,Decimal,我在这里感到困惑。。。试图解析一个带有模式的简单XML文件时,我遇到了错误 下面是一个简单的代码: xmlDoc.LoadXml(retXML); txtRead = new StringReader(xmlDoc.InnerXml); tmpDS = new DataSet(); tmpDS.ReadXmlSchema(HttpContext.Current.Server.MapPath("~/sc
xmlDoc.LoadXml(retXML);
txtRead = new StringReader(xmlDoc.InnerXml);
tmpDS = new DataSet();
tmpDS.ReadXmlSchema(HttpContext.Current.Server.MapPath("~/schemas/pnrView.xml"));
tmpDS.ReadXml(txtRead);
然后我得到了这个错误:
输入字符串的格式不正确。在System.Number.StringToNumberString str,NumberStyles选项,NumberBuffer&Number,NumberFormatInfo信息,System.Number.ParseDecimalString值的布尔parseDecimal值,NumberStyles选项,System.Data.Common.DecimalStorage.ConvertXmlToObject字符串,System.Data.XmlDataLoadColumnDataColumn列,Object[]查找System.Data.XmlDataLoader.LoadTableDataTable表中的列,布尔值嵌套在System.Data.XmlDataLoader.LoadTableDataTable表中,布尔值嵌套在System.Data.XmlDataLoader.LoadDataXmlReader读卡器和System.Data.DataSet.ReadXmlReader读卡器中,DotNetNuke.StSystem.Bookings.GetPnrViewNameValueCollection formData上的布尔DenResolving
以下是xml:
<PNRView>
<PNR>
<PricePPPN_UserCurrency/>
<PricePP_UserCurrency/>
<PriceTotal_UserCurrency/>
<PricePPPN_LocalCurrency/>
<PricePP_LocalCurrency/>
<LocalCurrency>EUR</LocalCurrency>
<PrCur>EUR</PrCur>
<PrTotal>0.0000</PrTotal>
<PrTotalEUR>0.0000</PrTotalEUR>
<ServiceNotes/>
</PNR>
</PNRView>
以下是模式:
<?xml version="1.0" standalone="yes"?>
<xs:schema id="PNRView" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="PNRView" msdata:IsDataSet="true" msdata:Locale="en-US">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="PNR">
<xs:complexType>
<xs:sequence>
<xs:element name="PricePPPN_UserCurrency" type="xs:decimal" minOccurs="0" default="0" nillable="true" />
<xs:element name="PricePP_UserCurrency" type="xs:decimal" minOccurs="0" default="0" nillable="true" />
<xs:element name="PriceTotal_UserCurrency" type="xs:decimal" minOccurs="0" default="0" nillable="true" />
<xs:element name="PricePPPN_LocalCurrency" type="xs:decimal" minOccurs="0" default="0" nillable="true" />
<xs:element name="PricePP_LocalCurrency" type="xs:decimal" minOccurs="0" default="0" nillable="true" />
<xs:element name="LocalCurrency" type="xs:string" minOccurs="0" />
<xs:element name="PrCur" type="xs:string" minOccurs="0" />
<xs:element name="PrTotal" type="xs:decimal" minOccurs="0" default="0" nillable="true" />
<xs:element name="PrTotalEUR" type="xs:decimal" minOccurs="0" default="0" nillable="true" />
<xs:element name="ServiceNotes" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
我尝试了minoccurs/nillable/default的每一种组合,xml通过了freeformatter.com的验证,不管C有什么不同的意见。属性nillable=true和minoccurs=0仅在不发送任何元素时才起作用。若要允许值为空,必须使用union来允许整数值,并在元素为空时设置大小写
<xs:element name="PrTotal">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base='xs:string'>
<xs:length value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base='xs:integer'>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:element>
您的CultureInfo会影响数字格式吗?可能会,但我不认为是这样。PrTotal被正确解析。只有空字段有问题。我手头没有什么可尝试的,但请检查以下答案:现在我遇到另一个错误:DataSet不支持将“union”或“list”作为simpleType。我发现的唯一相关字段建议使用