<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Extract multiple values from XML logs where field names may vary in DQL</title>
    <link>https://community.dynatrace.com/t5/DQL/Extract-multiple-values-from-XML-logs-where-field-names-may-vary/m-p/289194#M2739</link>
    <description>&lt;P&gt;I have XML-based logs from an API integration that look like this (simplified example):&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;2025-11-03 09:00:01,445 lLv="INFO" [&amp;lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"&amp;gt;
 &amp;lt;soapenv:Header&amp;gt;
   &amp;lt;ns1:SourceApplication&amp;gt;myApp&amp;lt;/ns1:SourceApplication&amp;gt;
   &amp;lt;ns1:Function&amp;gt;Payment&amp;lt;/ns1:Function&amp;gt;
 &amp;lt;/soapenv:Header&amp;gt;
 &amp;lt;soapenv:Body&amp;gt;
  &amp;lt;PaymentInitiateApproveUpdateRequest&amp;gt;
   &amp;lt;PaymentInitiateApproveRequest&amp;gt;
     &amp;lt;ns8:TransactionNumber xmlns:ns8="x:x"&amp;gt;111111&amp;lt;/ns8:TransactionNumber&amp;gt;
     &amp;lt;ns9:SerialNumber xmlns:ns9="x:x"&amp;gt;22222222&amp;lt;/ns9:SerialNumber&amp;gt;
   &amp;lt;/PaymentInitiateApproveRequest&amp;gt;
   &amp;lt;PaymentInitiateApproveRequest&amp;gt;
     &amp;lt;ns19:TransactionNumber xmlns:ns19="x:x"&amp;gt;333333&amp;lt;/ns19:TransactionNumber&amp;gt;
     &amp;lt;ns20:SerialNumber xmlns:ns20="x:x"&amp;gt;44444444&amp;lt;/ns20:SerialNumber&amp;gt;
   &amp;lt;/PaymentInitiateApproveRequest&amp;gt;
  &amp;lt;/PaymentInitiateApproveUpdateRequest&amp;gt;
 &amp;lt;/soapenv:Body&amp;gt;
&amp;lt;/soapenv:Envelope&amp;gt;], response: [&amp;lt;soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"&amp;gt;
 &amp;lt;soap:Body&amp;gt;
  &amp;lt;ns4:PaymentInitiateApproveUpdateResponse 
   &amp;lt;ns5:ResponseState&amp;gt;
    &amp;lt;ErrorCode&amp;gt;0&amp;lt;/ErrorCode&amp;gt;
   &amp;lt;/ns5:ResponseState&amp;gt;
   &amp;lt;ns4:PaymentInitiateApproveResponse&amp;gt;
    &amp;lt;ns2:PaymentInitiateKey&amp;gt;
     &amp;lt;ns3:TransactionNumber&amp;gt;555555&amp;lt;/ns3:TransactionNumber&amp;gt;
     &amp;lt;ns3:SerialNumber&amp;gt;66666666&amp;lt;/ns3:SerialNumber&amp;gt;
    &amp;lt;/ns2:PaymentInitiateKey&amp;gt;
    &amp;lt;ns2:ServiceElementResult&amp;gt;
     &amp;lt;ns2:ErrorCode&amp;gt;0&amp;lt;/ns2:ErrorCode&amp;gt;
    &amp;lt;/ns2:ServiceElementResult&amp;gt;
   &amp;lt;/ns4:PaymentInitiateApproveResponse&amp;gt;
   &amp;lt;ns4:PaymentInitiateApproveResponse&amp;gt;
    &amp;lt;ns2:PaymentInitiateKey&amp;gt;
     &amp;lt;ns3:TransactionNumber&amp;gt;777777&amp;lt;/ns3:TransactionNumber&amp;gt;
     &amp;lt;ns3:SerialNumber&amp;gt;888888888&amp;lt;/ns3:SerialNumber&amp;gt;
    &amp;lt;/ns2:PaymentInitiateKey&amp;gt;
    &amp;lt;ns2:ServiceElementResult&amp;gt;
     &amp;lt;ns2:ErrorCode&amp;gt;0&amp;lt;/ns2:ErrorCode&amp;gt;
    &amp;lt;/ns2:ServiceElementResult&amp;gt;
   &amp;lt;/ns4:PaymentInitiateApproveResponse&amp;gt;
  &amp;lt;/ns4:PaymentInitiateApproveUpdateResponse&amp;gt;
 &amp;lt;/soap:Body&amp;gt;
&amp;lt;/soap:Envelope&amp;gt;]."&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;BR /&gt;I need to extract fields like:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Function&lt;/STRONG&gt; from the header.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;TransactionNumber&lt;/STRONG&gt; and &lt;STRONG&gt;SerialNumber&lt;/STRONG&gt; from the request.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;ErrorCode&lt;/STRONG&gt; from the response (there can be multiple for payments and one for transfer)&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Challenges&lt;STRONG&gt;:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;These elements can appear multiple times (arrays of PaymentInitiateApproveRequest and PaymentInitiateApproveResponse).&lt;/LI&gt;
&lt;LI&gt;The XML tags vary, for example SerialNumber might appear as:
&lt;UL&gt;
&lt;LI&gt;&amp;lt;ns9:SerialNumber&amp;gt;614276066&amp;lt;/ns9:SerialNumber&amp;gt;&lt;/LI&gt;
&lt;LI&gt;&amp;lt;ns1:SerialNumber&amp;gt;614276066&amp;lt;/ns1:SerialNumber&amp;gt;&lt;/LI&gt;
&lt;LI&gt;&amp;lt;SerialNumber&amp;gt;614276066&amp;lt;/SerialNumber&amp;gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;My main problem is extracting the ErrorCode from the payment. It always appears after ns2:ServiceElementResult:&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang="markup"&gt;&amp;lt;ns2:ServiceElementResult&amp;gt;
 &amp;lt;ns2:ErrorCode&amp;gt;0&amp;lt;/ns2:ErrorCode&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;&lt;BR /&gt;This approach work for all the fields except the &lt;EM&gt;payment&lt;/EM&gt; ErrorCode:&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;| parse content, """Array{DATA 'TransactionNumbe' LD '&amp;gt;' LONG*:i '&amp;lt;/' LD 'ransactionNumber&amp;gt;'LF}{1,}:trans_num """
| parse content, """Array{DATA 'SerialNumbe' LD '&amp;gt;' LONG*:i '&amp;lt;/' LD 'erialNumber&amp;gt;'LF}{1,}:ser_num """
| parse content, """DATA "ErrorCode&amp;gt;" DATA:error_code_transfer "&amp;lt;/ErrorCode&amp;gt;" """
| parse content, """Array{DATA 'ServiceElementResult&amp;gt;' EOL LD 'ErrorCode&amp;gt;' LONG*:i '&amp;lt;/' LD 'ErrorCode&amp;gt;' LF}{1,}:error_code_payment """ // does not work&lt;/LI-CODE&gt;
&lt;P&gt;I have also tried with the XML approach:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;| parse content, """ DATA '[' XML_PLAIN:xml_env ']' DATA '[' XML_PLAIN:xml_response """
| fieldsAdd env_header = xml_env[`soapenv:Envelope`][`soapenv:Header`], reponse_body = xml_response[`soap:Envelope`][`soap:Body`]&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But I am not able to handle&amp;nbsp;varying tag names (namespace prefixes) and multiple values with this approach.&lt;/P&gt;</description>
    <pubDate>Mon, 17 Nov 2025 09:39:30 GMT</pubDate>
    <dc:creator>Kajao</dc:creator>
    <dc:date>2025-11-17T09:39:30Z</dc:date>
    <item>
      <title>Extract multiple values from XML logs where field names may vary</title>
      <link>https://community.dynatrace.com/t5/DQL/Extract-multiple-values-from-XML-logs-where-field-names-may-vary/m-p/289194#M2739</link>
      <description>&lt;P&gt;I have XML-based logs from an API integration that look like this (simplified example):&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;2025-11-03 09:00:01,445 lLv="INFO" [&amp;lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"&amp;gt;
 &amp;lt;soapenv:Header&amp;gt;
   &amp;lt;ns1:SourceApplication&amp;gt;myApp&amp;lt;/ns1:SourceApplication&amp;gt;
   &amp;lt;ns1:Function&amp;gt;Payment&amp;lt;/ns1:Function&amp;gt;
 &amp;lt;/soapenv:Header&amp;gt;
 &amp;lt;soapenv:Body&amp;gt;
  &amp;lt;PaymentInitiateApproveUpdateRequest&amp;gt;
   &amp;lt;PaymentInitiateApproveRequest&amp;gt;
     &amp;lt;ns8:TransactionNumber xmlns:ns8="x:x"&amp;gt;111111&amp;lt;/ns8:TransactionNumber&amp;gt;
     &amp;lt;ns9:SerialNumber xmlns:ns9="x:x"&amp;gt;22222222&amp;lt;/ns9:SerialNumber&amp;gt;
   &amp;lt;/PaymentInitiateApproveRequest&amp;gt;
   &amp;lt;PaymentInitiateApproveRequest&amp;gt;
     &amp;lt;ns19:TransactionNumber xmlns:ns19="x:x"&amp;gt;333333&amp;lt;/ns19:TransactionNumber&amp;gt;
     &amp;lt;ns20:SerialNumber xmlns:ns20="x:x"&amp;gt;44444444&amp;lt;/ns20:SerialNumber&amp;gt;
   &amp;lt;/PaymentInitiateApproveRequest&amp;gt;
  &amp;lt;/PaymentInitiateApproveUpdateRequest&amp;gt;
 &amp;lt;/soapenv:Body&amp;gt;
&amp;lt;/soapenv:Envelope&amp;gt;], response: [&amp;lt;soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"&amp;gt;
 &amp;lt;soap:Body&amp;gt;
  &amp;lt;ns4:PaymentInitiateApproveUpdateResponse 
   &amp;lt;ns5:ResponseState&amp;gt;
    &amp;lt;ErrorCode&amp;gt;0&amp;lt;/ErrorCode&amp;gt;
   &amp;lt;/ns5:ResponseState&amp;gt;
   &amp;lt;ns4:PaymentInitiateApproveResponse&amp;gt;
    &amp;lt;ns2:PaymentInitiateKey&amp;gt;
     &amp;lt;ns3:TransactionNumber&amp;gt;555555&amp;lt;/ns3:TransactionNumber&amp;gt;
     &amp;lt;ns3:SerialNumber&amp;gt;66666666&amp;lt;/ns3:SerialNumber&amp;gt;
    &amp;lt;/ns2:PaymentInitiateKey&amp;gt;
    &amp;lt;ns2:ServiceElementResult&amp;gt;
     &amp;lt;ns2:ErrorCode&amp;gt;0&amp;lt;/ns2:ErrorCode&amp;gt;
    &amp;lt;/ns2:ServiceElementResult&amp;gt;
   &amp;lt;/ns4:PaymentInitiateApproveResponse&amp;gt;
   &amp;lt;ns4:PaymentInitiateApproveResponse&amp;gt;
    &amp;lt;ns2:PaymentInitiateKey&amp;gt;
     &amp;lt;ns3:TransactionNumber&amp;gt;777777&amp;lt;/ns3:TransactionNumber&amp;gt;
     &amp;lt;ns3:SerialNumber&amp;gt;888888888&amp;lt;/ns3:SerialNumber&amp;gt;
    &amp;lt;/ns2:PaymentInitiateKey&amp;gt;
    &amp;lt;ns2:ServiceElementResult&amp;gt;
     &amp;lt;ns2:ErrorCode&amp;gt;0&amp;lt;/ns2:ErrorCode&amp;gt;
    &amp;lt;/ns2:ServiceElementResult&amp;gt;
   &amp;lt;/ns4:PaymentInitiateApproveResponse&amp;gt;
  &amp;lt;/ns4:PaymentInitiateApproveUpdateResponse&amp;gt;
 &amp;lt;/soap:Body&amp;gt;
&amp;lt;/soap:Envelope&amp;gt;]."&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;BR /&gt;I need to extract fields like:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Function&lt;/STRONG&gt; from the header.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;TransactionNumber&lt;/STRONG&gt; and &lt;STRONG&gt;SerialNumber&lt;/STRONG&gt; from the request.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;ErrorCode&lt;/STRONG&gt; from the response (there can be multiple for payments and one for transfer)&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Challenges&lt;STRONG&gt;:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;These elements can appear multiple times (arrays of PaymentInitiateApproveRequest and PaymentInitiateApproveResponse).&lt;/LI&gt;
&lt;LI&gt;The XML tags vary, for example SerialNumber might appear as:
&lt;UL&gt;
&lt;LI&gt;&amp;lt;ns9:SerialNumber&amp;gt;614276066&amp;lt;/ns9:SerialNumber&amp;gt;&lt;/LI&gt;
&lt;LI&gt;&amp;lt;ns1:SerialNumber&amp;gt;614276066&amp;lt;/ns1:SerialNumber&amp;gt;&lt;/LI&gt;
&lt;LI&gt;&amp;lt;SerialNumber&amp;gt;614276066&amp;lt;/SerialNumber&amp;gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;My main problem is extracting the ErrorCode from the payment. It always appears after ns2:ServiceElementResult:&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang="markup"&gt;&amp;lt;ns2:ServiceElementResult&amp;gt;
 &amp;lt;ns2:ErrorCode&amp;gt;0&amp;lt;/ns2:ErrorCode&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;&lt;BR /&gt;This approach work for all the fields except the &lt;EM&gt;payment&lt;/EM&gt; ErrorCode:&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;| parse content, """Array{DATA 'TransactionNumbe' LD '&amp;gt;' LONG*:i '&amp;lt;/' LD 'ransactionNumber&amp;gt;'LF}{1,}:trans_num """
| parse content, """Array{DATA 'SerialNumbe' LD '&amp;gt;' LONG*:i '&amp;lt;/' LD 'erialNumber&amp;gt;'LF}{1,}:ser_num """
| parse content, """DATA "ErrorCode&amp;gt;" DATA:error_code_transfer "&amp;lt;/ErrorCode&amp;gt;" """
| parse content, """Array{DATA 'ServiceElementResult&amp;gt;' EOL LD 'ErrorCode&amp;gt;' LONG*:i '&amp;lt;/' LD 'ErrorCode&amp;gt;' LF}{1,}:error_code_payment """ // does not work&lt;/LI-CODE&gt;
&lt;P&gt;I have also tried with the XML approach:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;| parse content, """ DATA '[' XML_PLAIN:xml_env ']' DATA '[' XML_PLAIN:xml_response """
| fieldsAdd env_header = xml_env[`soapenv:Envelope`][`soapenv:Header`], reponse_body = xml_response[`soap:Envelope`][`soap:Body`]&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But I am not able to handle&amp;nbsp;varying tag names (namespace prefixes) and multiple values with this approach.&lt;/P&gt;</description>
      <pubDate>Mon, 17 Nov 2025 09:39:30 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/DQL/Extract-multiple-values-from-XML-logs-where-field-names-may-vary/m-p/289194#M2739</guid>
      <dc:creator>Kajao</dc:creator>
      <dc:date>2025-11-17T09:39:30Z</dc:date>
    </item>
    <item>
      <title>Re: Extract multiple values from XML logs where field names may vary</title>
      <link>https://community.dynatrace.com/t5/DQL/Extract-multiple-values-from-XML-logs-where-field-names-may-vary/m-p/289790#M2790</link>
      <description>&lt;P&gt;I would use the following approach (ignoring namespaces and dealing with multiple values):&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;| parse content, "LD XML_PLAIN(ignoreNamespace=true):request ld '[' XML(ignoreNamespace=true):response"
&lt;/LI-CODE&gt;
&lt;P&gt;Additionally you can use the &lt;STRONG&gt;expand&lt;/STRONG&gt; and &lt;STRONG&gt;fieldsFlatten&lt;/STRONG&gt; commands to open up the records and arrays to separate result records. A solution can be seen in Security Investigator on our Playground at&amp;nbsp;&lt;A href="https://wkf10640.apps.dynatrace.com/ui/apps/dynatrace.security.investigator/share/9bff51ab-29fd-472e-a96d-49ce58453d60" target="_blank"&gt;https://wkf10640.apps.dynatrace.com/ui/apps/dynatrace.security.investigator/share/9bff51ab-29fd-472e-a96d-49ce58453d60&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Tiit_Hallas_0-1763505584043.png" style="width: 400px;"&gt;&lt;img src="https://community.dynatrace.com/t5/image/serverpage/image-id/30930i9886CF5951954C48/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Tiit_Hallas_0-1763505584043.png" alt="Tiit_Hallas_0-1763505584043.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 18 Nov 2025 22:39:53 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/DQL/Extract-multiple-values-from-XML-logs-where-field-names-may-vary/m-p/289790#M2790</guid>
      <dc:creator>Tiit_Hallas</dc:creator>
      <dc:date>2025-11-18T22:39:53Z</dc:date>
    </item>
  </channel>
</rss>

