引用或设置 XML 消息体内的元素时,必须在 ESQL 字段引用中使用正确的相关名来对它们进行寻址。下表列出了所有有效元素的相关名。有关 XmlDec 和 DocTypeDecl 属性的相关名,请参阅访问 XML 消息中的属性、访问 XML 消息中的 XmlDecl和访问 XML 消息中的 DocTypeDecl。有关字段引用的信息,请参阅 ESQL 字段引用。
语法元素 | 相关名 |
---|---|
CDataSection | (XML.CDataSection) |
Comment | (XML.Comment) |
Content | (XML.Content) - 也支持 (XML.pcdata) |
Element | (XML.Element) - 也支持 (XML.tag) |
EntityReferenceEnd | (XML.EntityReferenceEnd) |
EntityReferenceStart | (XML.EntityReferenceStart) |
ProcessingInstruction | (XML.ProcessingInstruction) |
WhiteSpace | (XML.WhiteSpace) |
当路径元素中没有类型时,语法元素的类型就不重要了。即,路径元素 name 匹配任何名称为 name 的语法元素(无论它的元素类型是什么)。以相同的方式,路径元素可以指定名称而不是类型,路径元素可以指定类型而不是名称。这种类型的路径元素与任何具有指定类型的语法元素相匹配(无论它的名称是什么)。下面是这样的示例:
FIELDNAME(InputBody.(XML.Element)[1 ])
此示例返回消息体中第一个元素的名称。以下一般 XML 示例显示了何时有必要在路径中使用类型:
<tag1 attr1='abc'> <attr1>123<attr1> </tag1>
路径 InputBody.tag1.attr1 引用称为 attr1 的属性,因为属性出现在 XML 解析器生成的语法树中的嵌套元素之前。要引用称为 attr1 的元素,必须使用路径:
InputBody.tag1.(XML.Element)attr1
在要显示引用的是什么语法元素的情况下,包含类型总是可取的。
下列 ESQL:
SET OutputRoot.XML.Element1.(XML.Element)Attribute1 = '123';
实际上是以下全限定路径的缩写:
SET OutputRoot.XML.(XML.Element)Element1.(XML.Element)Attribute1. (XML.Content) = '123';
请查看以下 XML:
<?xml version="1.0"?> <!DOCTYPE Order SYSTEM "Order.dtd"> <Order> <ItemNo>1</ItemNo> <Quantity>2</Quantity> </Order>
路径 InputBody.Order 将引用 (XML.DocTypeDecl) 语法元素,因为此项在语法树中显示在 XML 主体前面,并具有相同的名称。要引用元素 ItemNo,需要使用路径 InputBody.(XML.Element)Order.ItemNo。下面的示例使用以下 XML 输入消息演示了相同的概念:
<doc><i1>100</i1></doc>
要将 112233 指派到 <i1>,您必须使用以下 ESQL 表达式:
SET OutputRoot.XML.(XML.Element)doc.I1=112233;