2

我注意到pyxb decimal数据类型在呈现为 XML 时不会保留尾随零。罪魁祸首是normalize()对函数以下行中的调用,即XsdLiteral第 159 行binding/datatypes.py

(sign, digits, exponent) = value.normalize().as_tuple()

(其中value是 Python 的一个实例decimal)。这对我来说有点问题,因为我尝试与之交互的 Web 服务需要表单的版本号,X.000而 pyxb 将其截断为X.0.

这是预期的行为吗?或某些标准要求?其他 XML 模式生成库是否也这样做?我现在的解决方案是string改用,但如果它不破坏任何东西,代码将很容易更改。

4

2 回答 2

1

我没有使用 pyxb 的经验,但我的猜测是,通常人们希望 XML 尽可能紧凑以保留内存,因此截断小数以保留字节。

这似乎不是使用小数的正常情况。我认为小数应该用于存储数学数值,因此始终可以截断。由于您的情况很特殊,因此该模块可能并非旨在满足您的需求。

于 2015-07-08T16:51:23.727 回答
1

官方 PyXB 响应在这里,但来自xs:decimal 值的规范表示的描述

Leading and trailing zeroes are prohibited subject to the following:
there must be at least one digit to the right and to the left of the
decimal point which may be a zero.

同样在十进制本身的描述中:

Precision is not reflected in this value space; the number 2.0 is not
distinct from the number 2.00.

服务提供者不符合要求提供尾随零。

于 2015-07-09T01:54:59.550 回答