xml格式须知

| Comments

着重介绍与项目使用相关的xml知识

常见节点

  • 虽然xml节点是可以带属性的,但是我们项目中使用的通常没有带属性。
  • 常见节点有带子节点的节点(非内容节点)、带文本的节点。
  • 协议中表示可选的节点,通常是指文本为空的节点,如,而不能不带。

节点的顺序

  • 非列表节点,通常是不需要限定顺序的,但不排除有一些SB系统处理不了,所以最好按协议顺序来。
  • 带列表节点,最好保证子节点按业务要求的顺序排列,即使有标示顺序的子节点。

命名空间

  • 通常是有命名空间的话,所有节点都会带,不带通常是不对的。
  • 命名空间是通过xmlns:n0=”http://www.gmcc.net/ngcrm/” 来进行别名的,理论上应该认URI而不是别名,但实际使用却常用别名来识别。
  • 解析时可以考虑忽略命名空间处理,例如xpath,可以用doc.selectNodes(“//*[local-name()=’Service’]”)找到Service节点。

编码格式

  • xml是一种自编码文本,是由第一行决定整个xml的编码格式。
  • 上面只是规范,但像http一样,总有系统不是这么玩的,需要双方协商和确认。
  • 有的xml就是没有第一行的编码描述,更是应该协商确认。

合法的值

  • 除了内置xml文本作为文本节点,或者明显可能特殊字符的文本(如密码,各种属性用某符号拼接),大多数情况不需要关注。
  • 和html一样,某些特殊字符是需要转移的,见下面的转义列表。
  • 如果不想转义,需要用<![CDATA[]]>括起来,需要注意的是,里边的内容需要保持不转义。
  • <![CDATA[]]>里边的内容是原封不动获取的,即使内容带了回车、空格,如果需要对内容二次处理的话,需要注意某些留空可能导致无法处理。
  • <![CDATA[]]>不能嵌套两次,只能用转义来规避。

常见的特殊字符

lt &lt; <(小于号)
gt &gt; >(大于号)
amp &  &(“and”符)
apos ' '(撇号或单引号)
quot " "(双引号)

Comments