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;