XML xs:int十六进制值

时间:2012-08-01 17:49:06

标签: xml xsd hex

我想将数字存储在类型为或其他简单整数类型的XML文件中,但允许用户以十六进制格式输入数字。 XML标准是否允许这样做,因为我找不到任何相关的东西?

例如,如果XSD说:

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

然后我希望XML能够说:

<value>0xFF00FF</value>

或十六进制的任何表示法。

显然我可以尝试但只能证明在一个特定的实现中支持,而不是它是否是标准。我不特别在意保存到XML是否会失去基础。

4 个答案:

答案 0 :(得分:4)

我不这么认为。 xs:integerxs:decimal的派生/子集类型,其表示形式为defined as

  

decimal有一个词法表示,由一个有限长度的十进制数字序列(#x30-#x39)组成,用句点作为十进制指示符分隔。允许使用可选的前导符号。如果省略符号,则假定为“+”。前导零和尾随零是可选的。如果小数部分为零,则可以省略周期和后面的零。例如:-1.23,12678967.543233,+ 100000.00,210。

你可以删除0x并将其设置为hexBinary,尽管你会丢失数字语义。

答案 1 :(得分: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前缀)。但是,在将字符串转换为数字时,您需要专门处理它。

答案 2 :(得分:3)

我自己需要这个并在这里结束。

这是一个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>

答案 3 :(得分:2)

XSD不允许这样做。

但XSD 1.1确实允许实现定义的方面,包括前词法方面,而Saxon利用这种自由来提供撒克逊:这里描述的预处理方面:

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

这将允许您接受十六进制表示法作为整数类型的词法表示。唯一的缺点(可能是一个大的!)是它只适用于撒克逊。