本主题描述 XML 解析器如何处理显式空值。
XML 域在消息位流中没有空值的概念。在 XML 消息中没有导致在消息树中由 XML 解析器创建显式空值的字节序列。虽然解析器不创建带有显式空值的消息树字段,但您可以在消息流内对创建该格式字段的 ESQL 进行编码。
当 XML 解析器从消息树构造新的消息位流时,它会遇到显式空值且必须有能力处理它们。 在这种情况下,显式空值会视为“无字符要写入”,从而该字段作为空标记创建。
在 XML 域中,有几个值会导致在输出 XML 消息中写入 XML 空标记:
当这些已经作为空标记被写入到 XML 消息中时,如果随后解析了 XML 消息,则不可能区分这三种情况。当在 XML 中分析空标记时,则创建了没有值的 XML 消息树字段。这与包含显式空值的消息树字段不相同,与包含零长度字符串的消息树字段也不相同。
虽然在消息位流中,XML 解析器将这三种不同的消息树字段值解析为相同的结果,但是其他消息树操作可以区分它们。虽然 XML 解析器没有创建包含显式空值和零长度字符串的字段,但是能在消息流中执行操作。
因此,如果消息流要处理 XML 域中的消息,ESQL 或 Java 必须区别显式空值、零长度字符串以及没有值的消息树字段。在对 ESQL 进行编码以查询元素值时,即使包含显式空值的字段也不会被认为是空。
XML 写过程可处理这种情况,但 ESQL 中的其他操作未将其作为空值处理。XML 域没有空值的概念,并且解析器从不创建包含显式空值的字段。由于 XML 域是基于字符的域,当查询字段值时,它将结果作为字符字段返回。如果创建带有显式空值的 XML 消息树字段,这将不会被那些获取消息树字段值的 ESQL 例程视为空值。
返回的是字段内容的字符表示,在这种情况下为字符串“NULL”。例如,如果您用 IS NULL 进行此类比较,这从不会计算出 TRUE 值。如果复制这个消息树字段到另一个消息树,则字符串“NULL”会植入目标消息树字段。