Filtering specific tag values from XML based on condition

The XML has property name and value. I am trying to pull tag values from XML file only for certain property.

Here’s the sample XML.

<?xml version="1.0" encoding="UTF-8"?>
<JAMSObjects>
    <job method="Sequence" name="Seq-XXXYYYXXXZZZZ">
        <description>
        </description>
        <source>
        </source>
        <properties>
        </properties>
        <elements>
            <element name="" type="ScheduleTrigger">
                <properties>
                    <property name="ExceptForDate" typename="System.String" value="">
                    </property>
                    <property name="ScheduledStartDate" typename="System.DateTime" value="0001-01-01T00:00:00.0000000Z">
                    </property>
                    <property name="ScheduledEndDate" typename="System.DateTime" value="0001-01-01T00:00:00.0000000Z">
                    </property>
                    <property name="NonWorkdayScheduling" typename="MVPSI.JAMS.NonWorkdays" value="Schedule">
                    </property>
                    <property name="ScheduledDate" typename="System.String" value="Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday">
                    </property>
                    <property name="ScheduledTime" typename="MVPSI.JAMS.TimeOfDay" value="00:30:00">
                    </property>
                    <property name="TimeZone" typename="MVPSI.JAMS.TimeZoneReference" value="">
                    </property>
                    <property name="Enabled" typename="System.Boolean" value="false">
                    </property>
                </properties>
            </element>
            <element name="" type="Resubmit">
                <properties>
                    <property name="ResubmitDelay" typename="MVPSI.JAMS.DeltaTime" value="01:00">
                    </property>
                    <property name="ResubmitBase" typename="MVPSI.JAMS.ResubmitBase" value="ScheduledTime">
                    </property>
                    <property name="ResubmitOnError" typename="System.Boolean" value="false">
                    </property>
                    <property name="Enabled" typename="System.Boolean" value="true">
                    </property>
                </properties>
            </element>
        </elements>
        <sourceElements>
            <element elementuid="89a5c4f2-6e94-4757-8c75-63ca60846971" name="" type="SequenceTask">
                <properties>
                    <property name="ParentTaskID" typename="System.Guid" value="00000000-0000-0000-0000-000000000000">
                    </property>
                    <property name="DisplayTitle" typename="System.String" value="Sequence">
                    </property>
                    <property name="Enabled" typename="System.Boolean" value="false">
                    </property>
                </properties>
            </element>
            <element elementuid="e62108b6-1df2-4695-a1db-789b9bcd55c7" name="XSXXSFFSSDEASAS" type="SubmitJobTask">
                <properties>
                    <property name="ParentTaskID" typename="System.Guid" value="89a5c4f2-6e94-4757-8c75-63ca60846971">
                    </property>
                    <property name="DisplayTitle" typename="System.String" value="XSSDDDFSWDFSD">
                    </property>
                    <property isrelative="true" jobname="XDFFSDFSDGSGSD" name="SubmitJob" typename="MVPSI.JAMS.JobReference">
                    </property>
                    <property name="Enabled" typename="System.Boolean" value="false">
                    </property>
                </properties>
            </element>
            <element elementuid="c1591abb-a7f5-4737-a569-08c516084416" name="IIDFGSDFSDFASDFS" type="SubmitJobTask">
                <properties>
                    <property name="ParentTaskID" typename="System.Guid" value="89a5c4f2-6e94-4757-8c75-63ca60846971">
                    </property>
                    <property name="DisplayTitle" typename="System.String" value="IDFSDDFGHDFGSDFS">
                    </property>
                    <property isrelative="true" jobname="FSDFSDFSD" name="SubmitJob" typename="MVPSI.JAMS.JobReference">
                    </property>
                    <property name="Enabled" typename="System.Boolean" value="false">
                    </property>
                </properties>
            </element>
            <element elementuid="d675bf2c-3891-4eb3-bfaa-d2129bf28e27" name="UNDDSDFSDFSV" type="SubmitJobTask">
                <properties>
                    <property name="ParentTaskID" typename="System.Guid" value="89a5c4f2-6e94-4757-8c75-63ca60846971">
                    </property>
                    <property name="DisplayTitle" typename="System.String" value="UNCSXCSASD">
                    </property>
                    <property isrelative="true" jobname="UNX_PDSFSDFSDFSDFS" name="SubmitJob" typename="MVPSI.JAMS.JobReference">
                    </property>
                    <property name="Enabled" typename="System.Boolean" value="false">
                    </property>
                </properties>
            </element>
            <element elementuid="7c2754c2-005f-42fb-aee5-e5e6807c6421" name="DSFDGHDFGSDFASDAS" type="SubmitJobTask">
                <properties>
                    <property name="ParentTaskID" typename="System.Guid" value="89a5c4f2-6e94-4757-8c75-63ca60846971">
                    </property>
                    <property name="DisplayTitle" typename="System.String" value="FSDFSDFSDFGSDFADF">
                    </property>
                    <property isrelative="true" jobname="GDFGSDFADSFSDFSDF" name="SubmitJob" typename="MVPSI.JAMS.JobReference">
                    </property>
                    <property name="Enabled" typename="System.Boolean" value="false">
                    </property>
                </properties>
            </element>
        </sourceElements>
        <parameters>
            <parameter dataType="Text" inherited="True" length="25" name="JAMSTraceLevel">
                <properties>
                    <property name="Sequence" typename="System.Int32" value="1">
                    </property>
                </properties>
            </parameter>
        </parameters>
    </job>
</JAMSObjects>

From the element tag - I need to pull value if the element name is “ScheduleTrigger” and property names ScheduledDate, ScheduledTime

            <element name="" type="ScheduleTrigger">
                <properties>
                    <property name="ExceptForDate" typename="System.String" value="">
                    </property>
                    <property name="ScheduledStartDate" typename="System.DateTime" value="0001-01-01T00:00:00.0000000Z">
                    </property>
                    <property name="ScheduledEndDate" typename="System.DateTime" value="0001-01-01T00:00:00.0000000Z">
                    </property>
                    <property name="NonWorkdayScheduling" typename="MVPSI.JAMS.NonWorkdays" value="Schedule">
                    </property>
                    <property name="ScheduledDate" typename="System.String" value="**Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday**">
                    </property>
                    <property name="ScheduledTime" typename="MVPSI.JAMS.TimeOfDay" value="00:30:00">
                    </property>
                    <property name="TimeZone" typename="MVPSI.JAMS.TimeZoneReference" value="">
                    </property>
                    <property name="Enabled" typename="System.Boolean" value="false">
                    </property>
                </properties>
            </element>

How do I only pick the element with type “ScheduleTrigger” which may not always the first element and these selected properties?

My expected tabular output is below:

Job Name                             ScheduledTime                
Seq-XXXYYYXXXZZZZ                    00:30:00

Hi @jaydeep2

This should be doable. Since you’re not referring to any work done so far I’m assuming you haven’t touched the Xpath node do to this.

If you’re unfamiliar with Xpath I would recommended doing some online research about it first to get a feeling of the basics.

See below example related to your use case:

Note: for illustration purposes, I take a slightly longer route than strictly is required.

In your whole XML document, there are a bunch of element types to choose from:
ScheduleTrigger
Resubmit
SequenceTask
SubmitJobTask,
etc.
which have all there corresponding Xpath locations. You can find these by clicking on the attribute name in the Xpath node. It will show up in green.

Since you mentioned that ScheduleTrigger might not always be the first element, you have to use a ‘search term’ that the query will try and find a match for, regardless of the actual location.
Here, I do this by searching for /JAMSObjects/job/elements/element[@type="ScheduleTrigger"]

If you then select the output to be of type Node(SingleCell), you’re are basically making an extraction of everything that is within <element name="" type="ScheduleTrigger"></element>

If you add another Xpath node and select the Node(SingleCell) that you just created as input, you can create the final query that gets the actual information. In this case, you can hardcode them assuming the composition of the Node(SingleCell) always stays the same.

Some of the information you’re looking is already available outside of ScheduleTrigger. For this, normal Xpath queries can be used in the first Xpath node. I don’t see a clear reference to the Job Name so I just assumed it to be the value of <job method="Sequence" . You can change this to any other field of choice.

Note: in your description you mention ScheduledDate as desired output but it’s not in your final expected tabular table. I added it as back-up.

See WF:
Filtering specific tag values from XML based on condition.knwf (19.5 KB)

Hope this helps!

4 Likes

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.