xml根节点应使用带领域前缀的名词短语(如shipment、order),避免泛化名;优先用子元素表达业务字段,属性仅用于元数据;必须显式声明version属性和命名空间;集合统一用复数标签包裹且禁止空标签或类型混用。

XML 根节点命名要反映业务域,别用 data 或 root
根节点是整个 XML 的语义锚点,起错名会导致后续所有解析逻辑模糊。比如物流系统里用 shipment 比 record 明确得多,下游系统一眼知道这是运单数据。
- 避免泛化名:
data、info、root—— 它们不携带任何业务含义,扩展时容易歧义 - 推荐用名词短语,带领域前缀:
order、customer-profile、inventory-snapshot - 如果未来可能拆分成多个文档类型,根名最好预留扩展空间,比如不用
order-v1,而用order+version属性
用属性还是子元素?优先子元素,属性只放元数据
新手常把所有字段塞进属性,结果导致结构僵硬、无法嵌套、难以验证。XML 解析器对属性值类型支持弱(全是字符串),且 XPath 查询和 XSLT 处理属性更麻烦。
技术上面应用了三层结构,AJAX框架,URL重写等基础的开发。并用了动软的代码生成器及数据访问类,加进了一些自己用到的小功能,算是整理了一些自己的操作类。系统设计上面说不出用什么模式,大体设计是后台分两级分类,设置好一级之后,再设置二级并选择栏目类型,如内容,列表,上传文件,新窗口等。这样就可以生成无限多个二级分类,也就是网站栏目。对于扩展性来说,如果有新的需求可以直接加一个栏目类型并新加功能操作
- 该用子元素的:
name、price、address—— 它们有结构潜力(比如以后address要拆成street/city) - 该用属性的:
id、lang、updated-at、status—— 纯标识、控制或修饰性信息 - 特别注意:
xmlns、xml:lang这类标准属性必须保留,但自定义命名空间别滥用,否则 XSD 验证和工具链容易报错
版本控制别藏在注释里,用 version 属性 + 命名空间分离
靠人工读注释判断 XML 版本,上线后出问题根本没法自动化识别。没有显式版本信号,新老系统混跑时字段增删会直接导致解析失败或静默丢数据。
- 必须加
version属性,例如:<order version="2.1"></order> - 重大不兼容变更(如重命名根节点、调整层级)应配合命名空间升级:
xmlns="https://example.com/ns/order/v2" - 别用
schemaLocation绑死 XSD 路径,生产环境路径常变;改用独立的 schema 注册中心或 API 元数据接口获取校验规则
数组怎么表达?统一用复数标签包裹,禁止空标签或混合类型
常见错误是把列表写成 <items><item>A</item><item>B</item></items>,看似合理,但遇到单条数据时有人图省事写成 <items>A</items>,解析器立刻崩溃。
- 强制约定:所有集合必须用复数标签 + 至少一个子元素,哪怕只有一个项:
<items><item>A</item></items> - 禁止用空标签表示空数组:
<items></items>是反模式,应为<items></items>或<items></items>(二者语义不同,需明确定义) - 别混用类型:
<children><child name="a"></child><child>B</child></children>这种写法会让 Schema 定义失效,XPath 也难统一提取
version 属性、xmlns 值、集合包装规则,有没有被所有调用方真正遵守。协议落地比设计文档重要得多。









