无法使用架构分析XML中的空小数/整数

本文关键字:小数 整数 XML | 更新日期: 2023-09-27 18:26:02

我在这里感到困惑。。。试图用Schema解析一个简单的XML文件,结果出现了错误。

这里有一个简单的代码:

            xmlDoc.LoadXml(retXML);
            txtRead = new StringReader(xmlDoc.InnerXml);
            tmpDS = new DataSet();
            tmpDS.ReadXmlSchema(HttpContext.Current.Server.MapPath("~/schemas/pnrView.xml"));
            tmpDS.ReadXml(txtRead);

然后我得到这个错误:

输入字符串的格式不正确。System.Data.Common.DecimalStorage.ConvertXmlToObject(字符串s)位于System.Data.XmlDataLoader.LoadColumn(DataColumn列,Object[]foundColumns)System.Data.StSystem.Bookings.GetPnrView(NameValueCollection formData)处的System.Data.XmlDataLoader.LoadTable(DataTable表,布尔值嵌套)

这是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通过了FreeFormater.com中的验证,C#对此有不同的看法。

无法使用架构分析XML中的空小数/整数

属性nillable="true"minOccurs="0"仅在未发送元素时有效。若要允许空作为值,必须使用并集来允许整数值,并在元素为空时使用大小写。

<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>