2012-08-01 231 views
6

我想將一個數字存儲在類型爲或其他簡單整數類型的XML文件中,但允許用戶以十六進制格式輸入數字。 XML標準是否允許這樣做,因爲我找不到任何相關的東西?XML xs:int十六進制值

例如,如果XSD說:

<xs:element name="value" type="xs:integer" use="required" /> 

然後我希望XML能夠說:

<value>0xFF00FF</value> 

或任何十六進制的符號會。

很明顯,我可以嘗試它,但只能證明在一個特定的實現支持,而不是它是否是一個標準。我不特別在乎保存到XML是否會失去基礎。

回答

4

我不這麼認爲。 xs:integerxs:decimal派生/子集類型,這表示是defined as

十進制具有由句點分隔爲十進制指示器詞彙表示由十進制數字的有限長序列的(#x30-#X39) 。可選的前導標誌是允許的。如果符號被省略,則假定「+」。前導零和尾隨零是可選的。如果小數部分爲零,則可以省略週期和接下來的零。例如:-1.23,12678967.543233,+ 100000.00,210。

雖然丟失了數字語義,但您可以刪除0x並將其設置爲hexBinary。

2

XSD不允許這樣做。

但XSD 1.1確實允許實現定義方面,包括預詞彙方面,和薩克森利用這種自由提供撒克遜:預處理面說明如下:

http://www.saxonica.com/documentation/#!schema-processing/extensions11/preprocess

這將允許你接受十六進制符號作爲整數類型的詞彙表示。唯一的缺點(可能是一個大問題!)是,它只會與撒克遜工作。

4

我會在<xs:pattern>元素中使用regular expression

<xs:element name="value" use="required"> 
    <xs:simpleType> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="0x[0-9A-Fa-f]+|[0-9]+"/> 
    </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

這允許你存儲十進制和十六進制數(強制性0x前綴)。但是,您需要專門處理它,同時將字符串轉換爲數字。

1

我自己需要這個,並在這裏結束。

這是一個32位無符號整數類型,它允許您輸入十六進制或十進制數值。

<xs:simpleType name="U32BitHexInt"> 
    <xs:union memberTypes="xs:unsignedInt"> 
    <xs:simpleType> 
     <xs:restriction base="xs:token"> 
     <xs:pattern value="0x[0-9A-Fa-f]{8}"/> 
     </xs:restriction> 
    </xs:simpleType> 
    </xs:union> 
</xs:simpleType>