- 4 minutes to read

XPath on Message Context search field expression type plugin

Use this plugin to extract values from XML content within Context Properties

The Nodinite XPath on Message Context Search Field Expression Type plugin can be used to find one or more unique values from XML content (elements and attributes) from Context Properties for logged messages.

A Logged message comes from a Log Event that is part of the Logging feature of Nodinite and the Search Fields are further used within self-service enabled Log Views for your business.

Quick example

Let's get you started with the following simple demonstration example valid for this search field plugin. For other and more advanced examples please scroll down on this page to the Examples section.

Input 1st Expression 2nd Expression Result
<ns0:Orders xmlns:ns0="Common.Schemas/Nodinite/1.0">
    <Order>
        <Id>101</Id>
        <Amount>1000</Amount>
        <City>Karlstad</City>
    </Order>
    <Order>
        <Id>102</Id>
        <Amount>10</Amount>
        <City>Stockholm</City>
    </Order>
</ns0:Orders>
XMLContent
Orders/Order/Id
101
102
XML Data within Context Property 'XMLContent' 1st Named Context Property 2nd XPath expression Unique values

Features

This plugin uses a high performance read-only fast forward only stream reader. Based on Microsoft's XPathReader.

  • Extract XML content from named Context property
  • Uses many regular XPath expression as defined by W3C
  • The XPathReader provides the ability to perform XPath over XML documents in a streaming manner (large messages are thereby supported)
    • The XPathReader provides the ability to filter and process large XML documents in an efficient manner using an XPath-aware XmlReader. With the XPathReader, one can sequentially process a large document and extract an identified sub-tree matched by the user configured XPath expression

Not all types of XPaths can be evaluated using this XPath extractor, due to its forward only stream reader.


How to use

To extract values from XML messages you must first configure the Search Field, in this example case; The Order Id:

  • Select expression type plugin
  • Enter 1st expression to get the XML content from named Context property
  • Enter 2nd expression to get the content from XML content
  • Finalize remaining steps including selection of Message Types and optional re-index operation (Add or manage Search Field)

Once a Search Field is configured, values are extracted either during normal processing or from user initiated re-index operations. Extracted values are persisted and stored for as long as the days to keep events property on the Message Type is configured.

Test Expression

You can test an expression when configuring a Search Field in the 'Test Expression' tab

  1. Enter an appropriate payload in the 'Message Body' tab
  2. Select the 'XPath on Message Context' expression type plugin
    SelectXPathOnWrappedXPathPlugin
  3. Enter 1st Context property expression to get the XML content
  4. Enter 2nd XPath expression to get the content from the XML in step 3
  5. Review result/output, rewrite the code in step 3-4 until you get the data you seek

The actual result (values) are extracted by the Logging Service and then presented together with the evaluated processing state and the number of unique matches.

Test Expression
Valid expression with state output, unique values and total count

If the expression is either invalid or does not match any data, then the following output is presented:
NoResult
Invalid expression yields no result

Examples

You can find some additional examples of allowed expressions to get you started in the following link: XPath examples

Basic example

To extract order id(s) for the Message Type 'Common.Schemas/Nodinite/1.0#Orders' you can use the following named Context property 'XMLContent' and then the valid XPath expression 'Orders/Order/Id'. This configuration yields the unique values 101 and 102

graph LR subgraph "Search Fields" sf(fal:fa-search-plus Order Number) end subgraph "Search Field Expressions" sfe(fal:fa-flask XPath on Message Context plugin) end subgraph "MessageTypes" mt1(fal:fa-file Orders) end sf --- sfe sfe ---|Expression| mt1

Message Body

<ns0:Orders xmlns:ns0="Common.Schemas/Nodinite/1.0">
    <Order>
        <Id>101</Id>
        <Amount>1000</Amount>
        <City>Karlstad</City>
    </Order>
    <Order>
        <Id>102</Id>
        <Amount>10</Amount>
        <City>Stockholm</City>
    </Order>
</ns0:Orders>

1st Expression

XMLContent

2nd Expression

Orders/Order/Id

Next Step

How to Add or manage Search Fields
How to Add or manage Log Views

Expression Type Plugins are used in Search Fields
What are Search Fields?
What are Search Field Expressions?
What are Message Types?
What are Log Views?