为什么 XML 中的节点顺序很重要?

2023-11-24

我最近一直在处理一个 API,它要求 XML 文档的节点按特定顺序排列。我想知道为什么他们觉得有必要强制执行这一点,而我完全找不到理由让事情变成这样。

例如,这是正确的(xml 大大简化)

<transaction>
    <address>1 main st</address>
    <amount>100</amount>
    <orderId>1234</orderId>
</transaction>

但这会返回一个错误

<transaction>
    <address>1 main st</address>
    <orderId>1234</orderId>
    <amount>100</amount>
</transaction>

起初我认为这样他们就可以以列表/数组的形式存储东西,并且索引总是引用同一个节点。我理解为什么以相同的顺序发送具有相同名称的兄弟节点很重要,如所解释的在这个问题中。但是,可以省略一些节点:

<transaction>
    <amount>100</amount>
    <orderId>1234</orderId>
</transaction>

因此,在第三个示例中,amount 和 orderId 现在将位于 [0] 和 [1],而不是第一个(正确)示例中的 [1] 和 [2]。

另一种想法是,它们将 XML 作为字符串进行处理,并要求它们始终知道哪些节点紧随其后,但同样,由于允许省略节点,因此该理论没有意义。

谁能向我解释为什么我给出节点的顺序很重要?或者我只是在处理一个陈旧且脾气暴躁的 API?


节点顺序在 XML 中显然很重要,如下所示:

<p>
   <span>This wouldn't make much sense</span>
   <span>if the order of these nodes were reversed.</span>
</p>

它在 XML 中不太明显,就像您提供的那样,它似乎是某种序列化格式。但是,如果未按正确的顺序设置属性,则属性设置器具有副作用的对象可能会失败。

想象一下有一个私人班级Person暴露的领域PersonID and Name特性。这PersonIDsetter 创建私有实例Person,以及Name设置器设置Name私有财产Person场地。在这种情况下,设置Name在你设置之前PersonID失败,因为Person尚不存在。

这是实现需要的模式的情况PersonID出现在之前NameXML 中的内容可以防止此错误发生,但代价是迫使其他开发人员做一些明显无意义的事情。

在这种情况下,显而易见的事情就是找到编写该类的开发人员并击败他。这几乎是不可能的,尽管思考它所在的世界很有趣。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 XML 中的节点顺序很重要? 的相关文章

随机推荐

  • 如何通过 JavaScript 或 CSS 检查用户是否处于高对比度模式

    When pressing Shift Left Alt Print Windows switches into high contrast mode is there any chance to detect that on a web
  • ConcurrentHashMap的Segment和HashMap的Bucket理论上有什么区别?

    我知道在HashMap中 条目 Key Value 基于hash Key hashCode gt 表示存储桶位置的索引 如果条目已放置在该位置 则会创建一个链接列表和新条目 如果它有不同的键 gt 通过equals method 被放置在链
  • Dependency Walker 报告 IESHIMS.DLL 和 WER.DLL 丢失?

    在带有 Internet Explorer 8 的 Windows XP Professional SP3 上 当我对我的可执行文件运行 Dependency Walker 时 它会报告 IESHIMS DLL 和 WER DLL 无法找到
  • 在 RAD Studio 中使用正则表达式替换文本

    我想替换例如F G X Y with H X Y 在 RAD Studio IDE 中 我使用的正则表达式是 求表达式 F G 替换表达式 H 1 结果并不像我想象的那样 Result H 1 RAD Studio 似乎无法将 1 识别为两
  • 将 Python 函数存储在 JSON 中

    假设我有一个 JSON 文件 如下所示 x 5 y 4 func def multiplier a b return a d 这过度简化了我想要尝试和做的事情 但基本上我正在尝试将 python UDF 写入 JSON 文件 有没有办法做到
  • 为什么仅在存在存储初始化循环时才计算用户模式 ​​L1 存储未命中事件?

    Summary 考虑以下循环 loop movl 0x1 rax add 0x40 rax cmp rdx rax jne loop where rax被初始化为大于 L3 缓存大小的缓冲区的地址 每次迭代都会对下一个缓存行执行存储操作 我
  • Clojure 中的不一致:宏中的函数和 IllegalArgumentException

    以下两个在宏中使用函数的示例导致评估没有错误 defmacro works let f fn 1 f works gt 1 defn my nullary fn fn 2 defmacro also works let f my nulla
  • Rails habtm 连接

    我之间有这种关系类别 产品和品牌 class Brand lt ActiveRecord Base has many products end class Category lt ActiveRecord Base has and belo
  • x86 CPU 上中断延迟的估计

    我正在寻找有助于估计 x86 CPU 中断延迟的信息 这篇非常有用的论文可以在 datasheets chipdb org Intel x86 386 technote 2153 pdf 中找到 但这篇论文给我提出了一个非常重要的问题 如何
  • 在Java中,如何从派生类中的重写方法调用基类的方法?

    我有两个Java类 B 它扩展了另一个类A 如下 class A public void myMethod class B extends A public void myMethod Another code 我想致电A myMethod
  • 用户代理可以在其请求中设置大于零的 max-age 吗?

    我有一个疑问max age读取 Http 缓存后的行为rfc 设想 用户代理 GET foo 源服务器响应头 cache control max age 120 服务器告诉用户代理所请求的资源应在 2 分钟后重新验证 1分零几秒后 用户代理
  • 将列和行大小重置为默认值

    我正在构建一个脚本 通过自定义菜单项访问 其中还将包含一些样式 例如设置背景颜色 更改列宽 行高以及插入大量内容 现在我想实现一个 重置 功能 setall单元格恢复为默认的空 Google 表格的样子 包括所有内容 我找到了clear f
  • UISearchController - 警告尝试加载视图控制器的视图

    我收到以下错误 尝试加载视图控制器的视图 不允许解除分配并可能导致未定义的行为 尝试了以下解决方案 但对我不起作用正在解除分配时尝试加载视图控制器的视图 UISearchController 链接中提供了演示项目 点击主控制器中的添加按钮
  • Google App Engine 模块间通信授权

    In the 谷歌文档 it says 您可以将任何手动或基本扩展模块配置为接受来自应用程序中其他模块的请求 方法是将其处理程序限制为仅允许管理员帐户 并在模块的配置文件中为适当的处理程序指定 login admin 实施此限制后 来自应用
  • “控制器”是命名空间,但像类型一样使用

    当我创建新控制器时总是抛出错误 Controller 是命名空间 但像类型一样使用 我不知道如何修复它 我已经安装了该包 在此输入图像描述 将文件夹名称更改为 Controllers 将命名空间更改为 Controllers 因此您的代码应
  • 未复制引用的项目依赖项 DLL

    我的项目解决方案目前有三个项目 我的项目 这是我的主要启动项目 使用 NET Framework 4 7 WPF 特定于 UI 我的项目 核心 类库 NET Standard 2 0 保存模型以及所有 幕后 数据 我的项目 关系 类库 NE
  • SwiftUI 更新核心数据对象更改视图

    我遇到的问题是 当我从工作表视图更新核心数据资产对象时 更改不会反映在 AssetListView 的 UI 中 请注意 从工作表视图插入新对象does刷新 AssetListView 的 UI 删除工作表视图中的对象也刷新AssetLis
  • 在jsp中显示日期差异

    我在数据库中有一个日期字段 仅存储日期而不存储时间 现在我想知道在 jsp 页面中显示当前日期和我的日期字段的天数差异 所以我应该喜欢 databaseDate 2012 11 30 currentDate 2012 11 27 3 day
  • MS Access 编程概述 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我是一名 Java EE 开发人员 刚刚有人联系我 希望我为他的业务提供一个可以与他们的 MS Access 后端 集成的应用程序的报价 我希望发布
  • 为什么 XML 中的节点顺序很重要?

    我最近一直在处理一个 API 它要求 XML 文档的节点按特定顺序排列 我想知道为什么他们觉得有必要强制执行这一点 而我完全找不到理由让事情变成这样 例如 这是正确的 xml 大大简化