8

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

例如,如果 XSD 显示:

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

然后我希望 XML 能够说:

<value>0xFF00FF</value>

或任何十六进制表示法。

显然我可以尝试它,但这仅证明对一个特定实现的支持,而不是它是否是标准。我并不特别关心保存到 XML 是否会失去基础。

4

4 回答 4

6

我会在元素中使用正则表达式。<xs:pattern>

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

于 2015-05-27T09:06:56.507 回答
5

我不这么认为。xs:integer是 的派生/子集类型xs:decimal,其表示定义为

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

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

于 2012-08-01T18:23:14.400 回答
4

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

这是一个 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>
于 2016-04-25T01:56:34.720 回答
2

XSD 不允许这样做。

但是 XSD 1.1 确实允许实现定义的方面,包括前词汇方面,并且 Saxon 利用这种自由来提供这里描述的 saxon:preprocess 方面:

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

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

于 2012-08-01T22:16:23.557 回答