Saxon 是否提供了一种方法来维护映射中键的插入顺序?

Does Saxon provide a way to maintain the insertion order of keys in a map?

将映射序列化为 JSON 时,Saxon 似乎不维护键的插入顺序。虽然我知道 JSON 不需要这个,但它有助于诊断并减少最终用户的困惑。

有什么方法可以实现这一点,也许是通过实现自定义序列化程序?还是订单在此过程中更早丢失了?

Saxon(Java/.NET 版本)有两个 XDM 映射的实现,HashTrieMap 和 DictionaryMap,两者都没有维护顺序。两者都使用随机化插入位置的哈希结构,因此无法恢复它。同样,Saxon-JS 使用不保留顺序的 HashTrie 结构。

我们自己为 Saxon-JS 生成 SEF 文件时遇到了这个问题。这是一种 JSON-based 格式,如果属性是随机排列的,则很难阅读。因此,我们实现了序列化选项 saxon:property-order,它允许您为输出中的属性定义排序。它不能使您保持原始输入顺序,但它确实使您能够以对人类读者有意义的方式对输出进行排序。

与 W3C 规范的所有 Saxon 扩展一样,这需要 Saxon-PE 或更高。