XML 形式のログの parse
XML operator は XPath 1.0 仕様のサブセットを使用して、XML ログのフィールドを parse できます。この operator を使用すると、XPath リファレンスを使用して XML ログから parse するフィールドを指定できます。
XML operator で parse するには、取り込まれた XML ファイルが適切にフォーマットされており、有効である必要があります。XML が無効な場合は、エラーが発生します。
構文
| parse XML [field=<field_name>] "<xpath_expression>"[, "<xpath_expression>"] [as <fields>] [nodrop]
オプション
field=<field_name>
field=fieldname
オプションを使用すると、フィールドを指定して、デフォルト メッセージ以外を parse できます。詳細については、「Parse field」を参照してください。nodrop
nodrop
オプションは parse 用語のセグメントと一致しないメッセージも結果に含めるようにします。詳細については、「Parse nodrop」を参照してください。
ルール
- フィールドを指定しないと、受信メッセージのテキスト全体が使用されます。
- XPath が無効な場合は、エラーが発生します。
- フィールド名の数が指定された XPath の数と一致しない場合は、エラーが発生します。
- フィールドが適切な XML 形式ではない場合は、
nodrop
を指定しない限り Null が返されます。 - XPath がドキュメント内のどの部分とも一致しない場合は、
nodrop
を指定しない限り Null が返されます。 - XPath が要素と一致する場合は、その文字列表現が返されます。
- XPath が複数の要素と一致する場合は、最初の一致が返されます。
XPath サブセットの制限事項
XPath 1.0 の全仕様はサポートされていません。パフォーマンスの向上のため、Sumo Logic では次の制限を含む仕様のサブセットをサポートしています。
前方のみ
XML operator は XML パスのツリーを前方にのみ移動できます。たとえば、次の式は使用できません。
/af/nursery/../@type
場所のフル パス
parse する要素のフル パスを指定する必要があります。このため、"self-or-descendant" 式は使用できません。たとえば、次のパスは使用できません。
//af
/af//nursery
拡張構文の軸指定子は使用できない
拡張構文は使用できません。たとえば、次の式は使用できません。
/child::af
/descendant-or-self::af
例
提供されている parse オペレーションは次の XML ログを参照します。
<users>
<user id="123" role="manager">
<first_name>Sally</first_name>
<last_name>Jones</last_name>
<email>sally@emailplace.com</email>
</user>
<user id="456" role="contributor">
<first_name>Bob</first_name>
<last_name>Smith</last_name>
<email>bob@emailplace.com</email>
</user>
</users>
要素値の parse
first_name
要素値のような XPath 参照を使用して情報を parse できます。
* | parse xml "/users/user/first_name/text()" as first_name
text()
関数は、要素からテキスト値をプルします。結果として、Sally
という値が格納された first_name
という名前のフィールドが返されます。
配列内の 2 番目の user
要素を parse するには、次のように指定します。
* | parse xml "/users/user[2]/first_name/text()" as first_name
結果として、Bob
という値が格納された first_name
という名前のフィールドが返されます。
配列内の最後の要素を parse するには、次のように指定します。
* | parse xml "/users/user[last()]/first_name/text()" as first_name
属性 (この例では where id="456") に基づいて要素を parse するには、次のように指定します。
* | parse xml "/users/user[@id=456]/first_name/text()" as first_name"
属性値の parse
id
属性を parse するには、次のように指定します。
* | parse xml "/users/user/@id" as id
結果として、123
という値が格納された id
という名前のフィールドが返されます。
2 番目の user
要素から id
要素を parse するには、次のように指定します。
* | parse xml "/users/user[2]/@id" as id
リスト内の最後のユーザから id
値を parse するには、次のように指定します。
* | parse xml "/users/user[last()]/@id" as id
複数値の parse
1 つのメッセージから複数の要素と属性の値を別々のフィールドに parse するには、Xpath 式のコンマ区切りリストを使用します。たとえば、上の例から first_name
要素値と id
属性を parse するには、次のように指定します。
* | parse xml "/users/user/@id", "/users/user/first_name/text()" as id, first_name