2012-08-01 136 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>