我有一个XML文件,它是从客户系统生成的,其中十进制值以逗号而不是小数点输出,因此像10,5或1250,50而不是10.5或1250.50。 我需要对此XML文件进行验证和反序列化,因此我尝试创建一个XSD架构来进行验证,并在验证后对该文件进行反序列化。 一切正常,除了因为逗号验证数字。 我对XSD有以下限制,但我无法弄清楚如何添加限制一次并将其用于多个不同的元素,因为可能有很多带有数字的项目:
<xs:restriction base="xs:string">
<xs:pattern value="^\d+(\,\d{1,2})?$"/>
</xs:restriction>
我尝试在下面的XSD示例中的InvoiceRow元素中添加以下块,但它似乎打破了XSD格式:
<xs:simpleType name="DecimalValidation">
<xs:restriction base="xs:string">
<xs:pattern value="^\d+(\,\d{1,2})?$"/>
</xs:restriction>
</xs:simpleType>
这是我的XSD以及&#34; xs:decimal&#34;已经设置了具有数字值的项目,其中包含逗号,我需要使用限制来验证它们。
<xs:element name="InvoiceRow" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="ArticleIdentifier"/>
<xs:element type="xs:string" name="ArticleName"/>
<xs:element name="OrderedQuantity">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:short">
<xs:attribute type="xs:string" name="QuantityUnitCode" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="UnitPriceAmount">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute type="xs:string" name="AmountCurrencyIdentifier" use="optional"/>
<xs:attribute type="xs:string" name="UnitPriceUnitCode" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element type="xs:short" name="RowVatRatePercent"/>
<xs:element name="RowVatAmount">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute type="xs:string" name="AmountCurrencyIdentifier" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="RowVatExcludedAmount">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute type="xs:string" name="AmountCurrencyIdentifier" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="RowAmount">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute type="xs:string" name="AmountCurrencyIdentifier" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
感谢有关此的任何信息或建议。
答案 0 :(得分:1)
因为您的简单类型DecimalValidation
已命名,它应作为全局声明(即xs:schema
的子项)出现在架构的顶层,然后您应该能够通过引用xs:decimal
替换对DecimalValidation
的所有引用。 (看起来没有涉及名称空间,但如果有,可能需要添加合适的名称空间前缀。)