<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>XSLT on DecipherMiddleware</title><link>https://blog.deciphermiddleware.in/tags/xslt/</link><description>Recent content in XSLT on DecipherMiddleware</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sat, 12 Mar 2022 07:45:00 +0000</lastBuildDate><atom:link href="https://blog.deciphermiddleware.in/tags/xslt/index.xml" rel="self" type="application/rss+xml"/><item><title>DECIPHER: Dynamic XSLTs in BPEL (SOA 12c)</title><link>https://blog.deciphermiddleware.in/posts/decipher-dynamic-xslts-in-bpel-soa-12c/</link><pubDate>Sat, 12 Mar 2022 07:45:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/decipher-dynamic-xslts-in-bpel-soa-12c/</guid><description>&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/3b0f0ad9f3.jpg"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/3b0f0ad9f3.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;While developing integrations in BPEL 12c, XSLT is most commonly used to transform different XML message structures. We generally come across scenarios wherein based on specific input fields, our transformation logic changes. What we generally do is have all conditions within the same XSLT file. This makes our XSLT look a lot bigger and difficult to maintain. A better way would be to have different XSLTs and move deciding factor out of XSLT. Once we create different XSLTs for specific use cases having the same output format, now the question will come how to configure these XSLTs to be picked at runtime? This blog is curated with answers to such and many more questions.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take the example of account creation. There is a source application sending account information in an XML document which we need to update in a backend database. Now source system can send different types of address information like home address, business address, or shipping address. We get this information in the &lt;strong&gt;addressType&lt;/strong&gt; input field. In the backend database, for each type of address, there are different fields in the backend database. There could various ways to handle this.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create one single XSLT to handle all the scenarios using XSLT functions like &lt;strong&gt;if, choose-when&lt;/strong&gt; , etc. One single XSLT file for all the scenarios, BPEL code will be easy to read. But this will lead to a huge XSLT file and will be a bit tricky to maintain. In the future, if we want to add new conditions for only secondary addresses, then regression testing might be required to ensure we don&amp;rsquo;t hamper the other functionality.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/d4f912cbdf.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/d4f912cbdf.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Another way could be to have separate XSLTs for each scenario. As per the example, we have 3 scenarios. The address can be of type home, business, or shipping address.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We can have 3 XSLTs created for each scenario. Now maintainability of Transformation XSLT code will be a lot easier. These can now be configured using an if-else block within the BPEL process to decide which XSLT to pick. The BPEL process will look now similar to below.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/ea2ad1b12b.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/ea2ad1b12b.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Now suppose tomorrow we have a new condition added, then we need to add another block of &amp;ldquo;elseif&amp;rdquo; to accommodate this. This will make your BPEL code look bigger.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In SOA 12c we have below two functions that can be used to shorten the BPEL flow and use the XSLT dynamically.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ora:processXSLT&lt;/li&gt;
&lt;li&gt;ora:doXSLTransformForDoc&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;xmlns:ora&lt;/strong&gt; =&amp;ldquo;&lt;a href="http://schemas.oracle.com/xpath/extension%22"&gt;http://schemas.oracle.com/xpath/extension&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Both of the above functions support the location of the XSLT file and input XML. The above functions can be used in conjunction with DVM to fetch the location of XSLT and assign it to the input of the function.&lt;br&gt;
For the same example, let&amp;rsquo;s consider below DVM file as an example.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/8b70819393.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/8b70819393.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We can use the above DVM file to extract the location of XSLT that can be used. Suppose we store the conditional value in a variable called &lt;strong&gt;$addType&lt;/strong&gt;(having one of the values in the home, business, or shipping). We can use DVM lookup to fetch the resulting XSLT file location that can be provided as input to the above-mentioned functions in an Assign activity. In case none of the conditions matches the default.xsl file can be used.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;dvm:lookupValue&lt;/strong&gt;(&amp;ldquo;dvms/dynamicXSLT.dvm&amp;rdquo;, &amp;ldquo;addressType&amp;rdquo;,$addType, &amp;ldquo;xsltLocation&amp;rdquo;, &amp;ldquo;transformations/default.xsl&amp;rdquo;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Let us assume the output value of the above expression is stored in variable $dynamicXSLT and input XML is stored in $input. The expression will be:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ora:processXSLT&lt;/strong&gt;($dynamicXSLT, $input)&lt;br&gt;
&lt;strong&gt;ora:doXSLTransformForDoc&lt;/strong&gt;($dynamicXSLT, $input)&lt;/p&gt;
&lt;p&gt;Both the above functions do a similar task. But there is one major difference. Suppose your XSLT requires extra complex parameters to be passed as input. In such scenarios &lt;strong&gt;ora:doXSLTransformForDoc&lt;/strong&gt; comes real handy. In this function, we can pass key-value pairs of parameters that can be used within the XSLT.&lt;/p&gt;
&lt;p&gt;For example, if our XSLT requires a parameter &lt;strong&gt;contact&lt;/strong&gt;(as defined in XSLT) and the value is stored in the &lt;strong&gt;$Contact&lt;/strong&gt; variable in the BPEL process. Now our function will look like.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ora:doXSLTransformForDoc&lt;/strong&gt;($dynamicXSLT, $input, &amp;lsquo;contact&amp;rsquo;, $contact)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="references"&gt;References: &lt;a href="#references" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href="https://docs.oracle.com/middleware/12211/soasuite/develop/GUID-B37B91AF-0036-47EC-AB9F-FCBCD2BA55E2.htm#SOASE2117"&gt;https://docs.oracle.com/middleware/12211/soasuite/develop/GUID-B37B91AF-0036-47EC-AB9F-FCBCD2BA55E2.htm#SOASE2117&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Please share your valuable feedback 😊😊😊&lt;/p&gt;</description></item><item><title>Tips and Tricks for handling numbers in BPEL or OIC</title><link>https://blog.deciphermiddleware.in/posts/tips-and-tricks-for-handling-numbers-in/</link><pubDate>Sat, 28 Aug 2021 17:52:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/tips-and-tricks-for-handling-numbers-in/</guid><description>&lt;p&gt;While integrating with multiple systems and moving data from one system to the other, we generally come across scenarios, wherein we need to change the format of the number or perform operations like floor, ceil, round, divide, multiply, add, etc. on numbers. We will be going through various mathematical functions available in XSLT 1.0, which would be helpful in such scenarios, and also some generic errors which we encounter usually.&lt;/p&gt;
&lt;p&gt;&lt;a href="#mathematical-operations"&gt;Mathematical Operations&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#1-divide"&gt;Divide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#2-multiply"&gt;Multiply&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#3-add"&gt;Add&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#4-subtract"&gt;Subtract&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#5-square-root"&gt;Square-root&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#6-round"&gt;Round&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#7-floor"&gt;Floor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#8-ceil"&gt;Ceil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#9-advanced-number-formatting"&gt;Advanced Number formatting&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/feeds/posts/default?alt=rss&amp;amp;max-results=150#errors"&gt;Common Errors&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="mathematical-operations"&gt;Mathematical Operations &lt;a href="#mathematical-operations" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="1-divide"&gt;1. Divide &lt;a href="#1-divide" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To divide 2 numbers, we can use the &lt;strong&gt;div&lt;/strong&gt; operator to divide two numbers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$num1 div $num2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let us assume we want to divide 120 by 7.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;divide&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;120 div 7&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/divide&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;divide&amp;gt;&lt;/span&gt;17.14285714285714285714&lt;span class="nt"&gt;&amp;lt;/divide&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2-multiply"&gt;2. Multiply &lt;a href="#2-multiply" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To multiply 2 numbers, we can use the * operator.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$num1 * $num2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let us assume we want to multiply 120 by 7.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;multiply&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;120 * 7&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/multiply&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;multiply&amp;gt;&lt;/span&gt;840&lt;span class="nt"&gt;&amp;lt;/multiply&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="3-add"&gt;3. Add &lt;a href="#3-add" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To add 2 numbers, we can use the &lt;strong&gt;+&lt;/strong&gt; operator.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$num1 + $num2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let us assume we want to add 120 and 7.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;add&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;120 + 7&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;add&amp;gt;&lt;/span&gt;127&lt;span class="nt"&gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="4-subtract"&gt;4. Subtract &lt;a href="#4-subtract" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To subtract one number from another, we can use the &lt;strong&gt;-&lt;/strong&gt; operator.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$num1 - $num2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let us assume we want to subtract 7 from 120.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;subtract&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;120 - 7&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/subtract&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;subtract&amp;gt;&lt;/span&gt;113&lt;span class="nt"&gt;&amp;lt;/subtract&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="5-square-root"&gt;5. Square Root &lt;a href="#5-square-root" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To find a square root of a number, we can use the &lt;strong&gt;oraext:square-root&lt;/strong&gt; function.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;oraext:square-root($number)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let us assume we want to find a square root of 121.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;square-root&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;oraext:square-root(121)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/square-root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;square-root&amp;gt;&lt;/span&gt;11&lt;span class="nt"&gt;&amp;lt;/square-root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="6-round"&gt;6. Round &lt;a href="#6-round" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To round a number to the nearest integer we can use the round($number) function available in XSLT.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;round($number)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;roundInt&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;round(17.64285714285714285714)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/roundInt&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;roundInt&amp;gt;&lt;/span&gt;18&lt;span class="nt"&gt;&amp;lt;/roundInt&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What if we want to round the number to 2 or 3 decimal places. Since the round function only takes one argument, we cannot pass the number of decimal digits we want to round the number to. To do so we can try the below-mentioned method.&lt;/p&gt;
&lt;p&gt;We can multiply the number by 10m, round the number, and then divide the result by 10m. Here, m denotes the number of decimal places.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Pseudo Code:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;(round($number * 10 m) )/ 10 m
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let us assume we want to round to two decimal places. Here, the value of m will be 2. 10m will be equal to 100.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;roundDec1&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;round(17.64285714285714285714 * 100 ) div 100&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/roundDec1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;roundDec1&amp;gt;&lt;/span&gt;17.64&lt;span class="nt"&gt;&amp;lt;/roundDec1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="7-floor"&gt;7. Floor &lt;a href="#7-floor" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To return the largest integer less than or equal to the number we can use the floor($number) function available in XSLT.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;floor($number)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;floorInt&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;floor(17.64285714285714285714)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/floorInt&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;floorInt&amp;gt;&lt;/span&gt;17&lt;span class="nt"&gt;&amp;lt;/floorInt&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What if we want to perform floor operation on the number and have output with 2 or 3 decimal places. Since the floor function only takes one argument, we cannot pass the number of decimal digits we want to floor the number to. To do so we can try the below-mentioned method.&lt;/p&gt;
&lt;p&gt;We can multiply the number by 10m, floor the number, and then divide the result by 10m. Here, m denotes the number of decimal places.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Pseudo Code:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;(floor($number * 10 m) )/ 10 m&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let us assume we want to floor the number to three decimal places. Here, the value of m will be 3. 10m will be equal to 1000.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;floorDec1&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;floor(17.64285714285714285714 * 1000 ) div 1000&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/floorDec1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;floorDec1&amp;gt;&lt;/span&gt;17.642&lt;span class="nt"&gt;&amp;lt;/floorDec1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="8-ceil"&gt;8. Ceil &lt;a href="#8-ceil" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To return the largest integer greater than or equal to the number we can use the ceiling($number) function available in XSLT.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ceiling($number)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ceilInt&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ceiling(17.14285714285714285714)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/ceilInt&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ceilInt&amp;gt;&lt;/span&gt;18&lt;span class="nt"&gt;&amp;lt;/ceilInt&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What if we want to perform ceiling operation on the number and have output with 2 or 3 decimal places. Since the ceiling function only takes one argument, we cannot pass the number of decimal digits we want to ceil the number to. To do so we can try the below-mentioned method.&lt;/p&gt;
&lt;p&gt;We can multiply the number by 10m, ceiling the number, and then divide the result by 10m. Here, m denotes the number of decimal places.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Pseudo Code:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;(ceiling($number * 10 m) )/ 10 m
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let us assume we want to ceiling the number to three decimal places. Here, the value of m will be 3. 10m will be equal to 1000.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ceilDec1&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ceiling(17.14285714285714285714 * 1000 ) div 1000&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/ceilDec1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ceilDec1&amp;gt;&lt;/span&gt;17.143&lt;span class="nt"&gt;&amp;lt;/ceilDec1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="9-advanced-number-formatting"&gt;9. Advanced Number formatting &lt;a href="#9-advanced-number-formatting" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;We may come across the scenarios especially when dealing with financial or accounting integrations, wherein we want the numbers like &lt;strong&gt;1234.56&lt;/strong&gt; , &lt;strong&gt;45&lt;/strong&gt; to be formatted like &lt;strong&gt;1,234.56&lt;/strong&gt; , &lt;strong&gt;$45.00&lt;/strong&gt; , etc. One common way, while developing integration which we opt for, is multiple substrings and then multiple concatenations. There is a built-in function format-number, which can come in really handy in such situations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;format-number($number,$format,[$decimal-format])
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note: Here $decimal-format parameter is optional and we have not used it in examples.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Format Character Table&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;S.No.&lt;/th&gt;
&lt;th&gt;Character&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Representation for digit. For 0 after the decimal and before the number, it is present. For example, the number 1 with the format as &amp;lsquo;00.0&amp;rsquo; will give 01.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;#&lt;/td&gt;
&lt;td&gt;Representation for digit. For 0 after the decimal and before the number, it is absent. For example, the number 1 with the format as &amp;lsquo;##.#&amp;rsquo; will give 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;.&lt;/td&gt;
&lt;td&gt;Separator for decimal.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;,&lt;/td&gt;
&lt;td&gt;Group Separator. Suppose we want to separate thousands, we may use like #,###.##, When 1000 is passed as input, the output becomes 1,000.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;%&lt;/td&gt;
&lt;td&gt;Represent number in %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;;&lt;/td&gt;
&lt;td&gt;Separator to define different formats for negative and positive numbers.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Format number performs the round operation by default(&lt;strong&gt;&lt;em&gt;which is banker&amp;rsquo;s rounding&lt;/em&gt;&lt;/strong&gt;) to the number of decimal places defined in format. To understand more on how can we use various formats. Please find below the table consisting of various use cases&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;S.No.&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Input Number&lt;/th&gt;
&lt;th&gt;Formatted Number&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Always having two Decimal digits&lt;/td&gt;
&lt;td&gt;#.00&lt;/td&gt;
&lt;td&gt;123.456&lt;/td&gt;
&lt;td&gt;123.46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;123.4&lt;/td&gt;
&lt;td&gt;123.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Having a maximum of 2 decimal digits&lt;/td&gt;
&lt;td&gt;#.##&lt;/td&gt;
&lt;td&gt;123.456&lt;/td&gt;
&lt;td&gt;123.46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;123&lt;/td&gt;
&lt;td&gt;123&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Creating a number in Currency Format&lt;/td&gt;
&lt;td&gt;$#,###,###.00&lt;/td&gt;
&lt;td&gt;123456.789&lt;/td&gt;
&lt;td&gt;$123,456.79&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Display number in percentage&lt;/td&gt;
&lt;td&gt;0.13245&lt;/td&gt;
&lt;td&gt;##.##%&lt;/td&gt;
&lt;td&gt;13.25%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Having different formats for positive and negative numbers.&lt;/td&gt;
&lt;td&gt;#.000;(#.000)&lt;/td&gt;
&lt;td&gt;132.45&lt;/td&gt;
&lt;td&gt;132.450&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;-132.45&lt;/td&gt;
&lt;td&gt;(132.450)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format1&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;format-number(123.456, &amp;#39;#.00&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/format1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format1-1&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;format-number(123.4, &amp;#39;#.00&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/format1-1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format2&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;format-number(123.456, &amp;#39;#.##&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/format2&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format2-1&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;format-number(123, &amp;#39;#.##&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/format2-1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format3&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;format-number(123456.789, &amp;#39;$#,###,###.00&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/format3&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format4&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;format-number(0.13245, &amp;#39;##.##%&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/format4&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format5&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;format-number(132.45, &amp;#39;#.000;(#.000)&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/format5&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format5-1&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;format-number(-132.45, &amp;#39;#.000;(#.000)&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/format5-1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format1&amp;gt;&lt;/span&gt;123.46&lt;span class="nt"&gt;&amp;lt;/format1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format1-1&amp;gt;&lt;/span&gt;123.40&lt;span class="nt"&gt;&amp;lt;/format1-1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format2&amp;gt;&lt;/span&gt;123.46&lt;span class="nt"&gt;&amp;lt;/format2&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format2-1&amp;gt;&lt;/span&gt;123&lt;span class="nt"&gt;&amp;lt;/format2-1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format3&amp;gt;&lt;/span&gt;$123,456.79&lt;span class="nt"&gt;&amp;lt;/format3&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format4&amp;gt;&lt;/span&gt;13.25%&lt;span class="nt"&gt;&amp;lt;/format4&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format5&amp;gt;&lt;/span&gt;132.450&lt;span class="nt"&gt;&amp;lt;/format5&amp;gt;&lt;/span&gt;=
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format5-1&amp;gt;&lt;/span&gt;(132.450)&lt;span class="nt"&gt;&amp;lt;/format5-1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="common-errors"&gt;Common Errors &lt;a href="#common-errors" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;We get XPath errors when the data type doesn&amp;rsquo;t match the numeric data type.&lt;/li&gt;
&lt;li&gt;We get NaN(Not a Number) error when we explicitly try to convert a string or any other data type to a number using the &lt;strong&gt;number()&lt;/strong&gt; function and the string contains some invalid characters apart from what is accepted by the number data type.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL to explain NaN errors:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;errors&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;error&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;number(&amp;#39;123 1&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/error&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;error&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;number(&amp;#39;abc&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/error&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;error&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;number(&amp;#39;123b&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/error&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/errors&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="resources"&gt;Resources: &lt;a href="#resources" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;XSLT file containing all the XSL statements used in the blog &amp;ndash; &lt;a href="https://github.com/pranav-davar/DecipherMiddleware/blob/1d4d4f55c20d21aea08a1374f10546633d07ff77/Oracle/xsl/handling-number.xsl"&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The output of the above file &amp;ndash; &lt;a href="https://github.com/pranav-davar/DecipherMiddleware/blob/1d4d4f55c20d21aea08a1374f10546633d07ff77/Oracle/xsl/handling-numbers-output.xml"&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please share your valuable feedback 😊😊😊&lt;/p&gt;</description></item><item><title>Database Xpath-extension Functions in SOA 12c</title><link>https://blog.deciphermiddleware.in/posts/database-xpath-extension-functions-in/</link><pubDate>Wed, 21 Jul 2021 13:18:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/database-xpath-extension-functions-in/</guid><description>&lt;p&gt;In SOA, we can connect with databases using a database jca adapter and configuring the &lt;strong&gt;data source&lt;/strong&gt; and &lt;strong&gt;connection factory&lt;/strong&gt; in the &lt;strong&gt;WebLogic server&lt;/strong&gt;. Sometimes, we may want to query the database directly within the BPEL component or XSLT without configuring a database jca adapter. For such use cases, we can take leverage of database functions that can be used within **BPEL Assign Activity **or &lt;strong&gt;XSLT transformations&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We have 3 different database functions available, that can be used in different use cases.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#1-oraextsequence-next-val"&gt;oraeext:sequence-next-val()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#2-oraextlookup-table"&gt;oraext:lookup-table()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#3-oraextquery-database"&gt;oraext:query-database()&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="1-oraextsequence-next-val"&gt;1. oraext:sequence-next-val() &lt;a href="#1-oraextsequence-next-val" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Syntax:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;oraext:sequence-next-val(sequence as string, dataSource as string)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;sequence:&lt;/strong&gt; Specify the sequence available in the database for which the next value needs to be extracted.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dataSource:&lt;/strong&gt; Specify the Data source JNDI name as configured in WebLogic server or JDBC string in the format &lt;strong&gt;jdbc:oracle:thin:username/password@host:port:sid&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; Only oracle thin driver is supported if used as JDBC string.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This function is used when we want to fetch the next value of defined sequence in the database. It can be used in cases where we want each request to adhere with a particular sequence id which can be used to identify each unique record where using a db adapter might create overhead and extra transformation. This function is basically an alternative to the below SQL statement.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SEQUENCE_TEST&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NEXTVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DUAL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCd-OMgVvRwSoMEABzRpqOd7uzAtVu-Yi8VwUjeMPdJUUrauCwA8qpCOK189MK9xTSYSXMtUZZfWIC1kHZbrEhIrxjFeofwAs4kxsSaKncMrJ8TLHHLWvAs0c140L45ehtp0EKsogsA-Q/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/6306d0404a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here, SEQUENCE_TEST is the name of the sequence defined in the database.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example usage in XSLT&lt;/strong&gt; :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL&lt;/em&gt; :&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;seqJDBCString&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;**oraext:sequence-next-val(&amp;#39;SEQUENCE_TEST&amp;#39;,&amp;#39;jdbc:oracle:thin:mark1/password@localhost:1521:XE&amp;#39; )** &amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/seqJDBCString&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/xsl:template&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;OUTPUT&lt;/em&gt; :&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;seqJDBCString&amp;gt;&lt;/span&gt;**2** &lt;span class="nt"&gt;&amp;lt;/seqJDBCString&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="2-oraextlookup-table"&gt;2. oraext:lookup-table() &lt;a href="#2-oraextlookup-table" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;oraext:lookup-table(tableName as string, inputColumn as string, inputData as string, outputColumn as string, dataSource as string)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;tableName:&lt;/strong&gt; Name of the table in database, from which value need to be fetched**.**&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;inputColumn:&lt;/strong&gt; Column name of the table for which we will supply the data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;inputData:&lt;/strong&gt; Data that will be provided as input to match a value in &lt;strong&gt;inputColumn&lt;/strong&gt; in the table**.**&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;outputColumn:&lt;/strong&gt; Column name of table for which value needs to fetched**.**&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dataSource:&lt;/strong&gt; Specify the Data source JNDI name as configured in WebLogic server or JDBC string in the format &lt;strong&gt;jdbc:oracle:thin:username/password@host:port:sid&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;**Note: **Only oracle thin driver is supported if used as JDBC string.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Suppose we have a table in our database which contains names of employee corresponding to the empIds. Now, we want to extract the name of employee corresponding to empId which we are getting in input. To do so, one way could be to have a db adapter created and use similar SQL statement as below to retrieve data.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EMP_NAME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EMPLOYEE_TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EMP_ID&lt;/span&gt;&lt;span class="o"&gt;=#&lt;/span&gt;&lt;span class="n"&gt;inputId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If we want to fetch the value directly in assign activity or xslt, we can use the oraext:lookup-table(). This can be treated as alternative approach to dvm lookup where in dvm files are stored local to composite or in MDS.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;EMPLOYEE_TABLE&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;EMP_ID&lt;/th&gt;
&lt;th&gt;EMP_NAME&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1002&lt;/td&gt;
&lt;td&gt;DecipherMiddleware&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;INPUT&lt;/em&gt; :&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://test.com/tns&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;empId&amp;gt;&lt;/span&gt;1002&lt;span class="nt"&gt;&amp;lt;/empId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/input&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL&lt;/em&gt; :&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;empName&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;oraext:lookup-table(&amp;#39;EMPLOYEE_TABLE&amp;#39;,&amp;#39;EMP_ID&amp;#39;,/ns0:input/ns0:/empId,&amp;#39;EMP_NAME&amp;#39;,&amp;#39;jdbc:oracle:thin:mark1/password@localhost:1521:XE&amp;#39; )&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&amp;lt;/empName&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/xsl:template&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;OUTPUT&lt;/em&gt; :&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;empName&amp;gt;&lt;/span&gt;DecipherMiddleware&lt;span class="nt"&gt;&amp;lt;/empName&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="3-oraextquery-database"&gt;3. oraext:query-database() &lt;a href="#3-oraextquery-database" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;oraext:query-database(sqlQuery as string, rowSet as boolean, row as boolean, dataSource as string)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;sqlQuery:&lt;/strong&gt; SQL query that needs to be executed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;rowSet:&lt;/strong&gt; true(), if we need tag for output rowSet()&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;row:&lt;/strong&gt; true(), if we need tag for each row&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dataSource:&lt;/strong&gt; Specify the Data source JNDI name as configured in WebLogic server or JDBC string in the format &lt;strong&gt;jdbc:oracle:thin:username/password@host:port:sid&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; Only oracle thin driver is supported if used as JDBC string.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This function can be used to execute SQL statements without configuring a JCA adapter in SOA composite. Let us assume we have a category table like below, from where we need to query all columns.&lt;/p&gt;
&lt;h3 id="category-table"&gt;CATEGORY TABLE &lt;a href="#category-table" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CATEGORYID&lt;/th&gt;
&lt;th&gt;CATEGORYNAME&lt;/th&gt;
&lt;th&gt;DESCRIPTION&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Beverages&lt;/td&gt;
&lt;td&gt;Soft drinks, coffees, teas, beers, and ales&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Condiments&lt;/td&gt;
&lt;td&gt;Sweet and savory sauces, relishes, spreads, and seasonings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Confections&lt;/td&gt;
&lt;td&gt;Desserts, candies, and sweet breads&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Dairy Products&lt;/td&gt;
&lt;td&gt;Cheeses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Grains/Cereals&lt;/td&gt;
&lt;td&gt;Breads, crackers, pasta, and cereal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;SQL Query&lt;/em&gt; :&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL&lt;/em&gt; :&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;xsl:variable&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dbData&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;oraext:query-database(&amp;#39;SELECT * FROM category&amp;#39;, true(),true(),&amp;#39;jdbc:oracle:thin:mark1/password@localhost:1521:XE&amp;#39; )&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;categoryData&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;xsl:copy-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;$dbData&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/categoryData&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/xsl:template&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;OUTPUT&lt;/em&gt;&lt;/strong&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;categoryData&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;ROWSET&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;ROW&lt;/span&gt; &lt;span class="na"&gt;num=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;CATEGORYID&amp;gt;&lt;/span&gt;1&lt;span class="nt"&gt;&amp;lt;/CATEGORYID&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;CATEGORYNAME&amp;gt;&lt;/span&gt;Beverages&lt;span class="nt"&gt;&amp;lt;/CATEGORYNAME&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;DESCRIPTION&amp;gt;&lt;/span&gt;Soft drinks, coffees, teas, beers, and ales&lt;span class="nt"&gt;&amp;lt;/DESCRIPTION&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/ROW&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;ROW&lt;/span&gt; &lt;span class="na"&gt;num=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;CATEGORYID&amp;gt;&lt;/span&gt;2&lt;span class="nt"&gt;&amp;lt;/CATEGORYID&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;CATEGORYNAME&amp;gt;&lt;/span&gt;Condiments&lt;span class="nt"&gt;&amp;lt;/CATEGORYNAME&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;DESCRIPTION&amp;gt;&lt;/span&gt;Sweet and savory sauces, relishes, spreads, and seasonings&lt;span class="nt"&gt;&amp;lt;/DESCRIPTION&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/ROW&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;ROW&lt;/span&gt; &lt;span class="na"&gt;num=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;3&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;CATEGORYID&amp;gt;&lt;/span&gt;3&lt;span class="nt"&gt;&amp;lt;/CATEGORYID&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;CATEGORYNAME&amp;gt;&lt;/span&gt;Confections&lt;span class="nt"&gt;&amp;lt;/CATEGORYNAME&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;DESCRIPTION&amp;gt;&lt;/span&gt;Desserts, candies, and sweet breads&lt;span class="nt"&gt;&amp;lt;/DESCRIPTION&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/ROW&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;ROW&lt;/span&gt; &lt;span class="na"&gt;num=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;4&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;CATEGORYID&amp;gt;&lt;/span&gt;4&lt;span class="nt"&gt;&amp;lt;/CATEGORYID&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;CATEGORYNAME&amp;gt;&lt;/span&gt;Dairy Products&lt;span class="nt"&gt;&amp;lt;/CATEGORYNAME&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;DESCRIPTION&amp;gt;&lt;/span&gt;Cheeses&lt;span class="nt"&gt;&amp;lt;/DESCRIPTION&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/ROW&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;ROW&lt;/span&gt; &lt;span class="na"&gt;num=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;5&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;CATEGORYID&amp;gt;&lt;/span&gt;5&lt;span class="nt"&gt;&amp;lt;/CATEGORYID&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;CATEGORYNAME&amp;gt;&lt;/span&gt;Grains/Cereals&lt;span class="nt"&gt;&amp;lt;/CATEGORYNAME&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;DESCRIPTION&amp;gt;&lt;/span&gt;Breads, crackers, pasta, and cereal&lt;span class="nt"&gt;&amp;lt;/DESCRIPTION&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/ROW&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/ROWSET&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/categoryData&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Since we have kept &lt;strong&gt;rowSet&lt;/strong&gt; and **row **as &lt;strong&gt;true()&lt;/strong&gt; , we are seeing tags coming in output from function result.&lt;/p&gt;
&lt;h3 id="references"&gt;References: &lt;a href="#references" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href="https://docs.oracle.com/en/middleware/soa-suite/soa/12.2.1.3/develop/xpath-extension-functions.html#GUID-73F8AE17-41AC-474E-8AF3-6027CAEADB55"&gt;https://docs.oracle.com/en/middleware/soa-suite/soa/12.2.1.3/develop/xpath-extension-functions.html#GUID-73F8AE17-41AC-474E-8AF3-6027CAEADB55&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please share your valuable feedback in the comments section below 😊&lt;/p&gt;</description></item><item><title>Create Delimited String from XML Nodes and Vice Versa in SOA 12c</title><link>https://blog.deciphermiddleware.in/posts/create-delimited-string-or-xml-nodes/</link><pubDate>Fri, 25 Dec 2020 00:00:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/create-delimited-string-or-xml-nodes/</guid><description>&lt;p&gt;A delimited string is a string representation of data separated by a delimiter(e.g. &amp;ldquo;,&amp;rdquo;). A simple representation of the delimited string will look like.&lt;/p&gt;
&lt;h2 id="delimited-string-examples"&gt;Delimited String Examples &lt;a href="#delimited-string-examples" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;Sample-1-- Delimiter as &amp;#34;,&amp;#34;
Value1,Value2,Value3
Sample-2-- Delimiter as &amp;#34;|&amp;#34;
Value1|Value2|Value3
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If we want to represent the above set of delimited values in the form of an XML document under some root and parent tag. The representation will look like this.&lt;/p&gt;
&lt;h3 id="xml-example"&gt;XML Example &lt;a href="#xml-example" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;root&lt;/span&gt; &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://test.com/sample/xml&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;Values&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;Value1&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;Value2&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;Value3&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/Values&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sometimes we may need to convert values coming in delimited string to an xml document or vice versa. Since delimited string is similar to csv format. We can create a nxsd schema and then perform translate i.e. native to xml or xml to native within our SOA application. But in the scenarios wherein we just want to convert one delimited string to xml or recurring xml nodes to one delimited string, there we can make use of oracle xpath extension functions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.deciphermiddleware.in/2020/12/create-delimited-string-or-xml-nodes.html#1"&gt;oraext:create-nodeset-from-delimited-string()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.deciphermiddleware.in/2020/12/create-delimited-string-or-xml-nodes.html#2"&gt;oraext:create-delimited-string()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;xmlns:oraext=&amp;ldquo;&lt;a href="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc%22"&gt;http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Both functions can be used in XSLT or BPEL assign activity. The above two mentioned examples will be used for explaining these 2 functions.&lt;/p&gt;
&lt;h2 id="oraextcreate-nodeset-from-delimited-string"&gt;oraext:create-nodeset-from-delimited-string() &lt;a href="#oraextcreate-nodeset-from-delimited-string" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This function is used to create XML node set from delimited string. Basic syntax of the function is as below.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;oraext:create-nodeset-from-delimited-string ($qName, $delimitedString, $delimiter)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;$qName:&lt;/strong&gt; Qualified name of the node for each value to be created along with namespace. For e.g. &amp;lsquo;{http://test.com/sample/xml}value&amp;rsquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;$delimitedString:&lt;/strong&gt; String containing values delimited by a delimiter. Examples as above.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;$delimiter:&lt;/strong&gt; String representation of delimiter. For e.g. &amp;lsquo;,&amp;rsquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="sample-xslt-code"&gt;Sample XSLT code: &lt;a href="#sample-xslt-code" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xslt" data-lang="xslt"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ns1:root&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ns1:Values&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:copy-of&lt;/span&gt; &lt;span class="na"&gt;select&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;oraext:create-nodeset-from-delimited-string(&amp;#39;{http://test.com/sample/xml}value&amp;#39;,&amp;#39;Value1,Value2,Value3&amp;#39; , &amp;#39;,&amp;#39; )&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ns1:Values&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ns1:root&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;xsl:template&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Excluding, the XSL header for a better view. Please make sure all namespaces are properly imported in the XSL header.
The above code snippet will give output as above example.&lt;/p&gt;
&lt;h2 id="oraextcreate-delimited-string"&gt;oraext:create-delimited-string() &lt;a href="#oraextcreate-delimited-string" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This function is used to convert nodes to delimited string. Below is the syntax of the function.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;oraext:create-delimited-string ($nodeSetValue, $delimiter)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;$nodeSetValue:&lt;/strong&gt; repetitive nodes or combination of nodes for which delimited string needs to be created. For e.g.&lt;/p&gt;
&lt;h3 id="xml-sample"&gt;XML Sample &lt;a href="#xml-sample" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;Value1&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;Value2&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;Value3&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;$delimiter:&lt;/strong&gt; String representation of delimiter. For e.g. &amp;lsquo;,&amp;rsquo;&lt;/p&gt;
&lt;p&gt;Sample code using the above sample&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--&amp;#39;,&amp;#39; as delimiter--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;oraext:create-delimited-string ($nodeSet/ns1:Values/ns1:value, &amp;#39;,&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--&amp;#39;|&amp;#39; as delimiter--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;oraext:create-delimited-string ($nodeSet/ns1:Values/ns1:value, &amp;#39;|&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;xmlns:ns1=&amp;ldquo;&lt;a href="http://test.com/sample/xml%22"&gt;http://test.com/sample/xml&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here &lt;strong&gt;$nodeSet&lt;/strong&gt; contains the XML data as represented in above example. Above XSL snippets will yield results as shown in &lt;a href="#delimited-string-examples"&gt;delimited string samples&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>XML to String and String to XML conversion</title><link>https://blog.deciphermiddleware.in/posts/xml-to-string-and-string-to-xml/</link><pubDate>Thu, 24 Sep 2020 00:00:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/xml-to-string-and-string-to-xml/</guid><description>&lt;h2 id="use-cases"&gt;Use Cases &lt;a href="#use-cases" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Many a times, we may need to convert xml data and pass it as a string inside an XML tag.&lt;/li&gt;
&lt;li&gt;Sometimes from source, we get data which is in string format but actually is xml encoded in string format.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To do so in Oracle BPEL 12c or OSB 12c we can use built in functions.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="xml-data-to-string"&gt;XML data to String &lt;a href="#xml-data-to-string" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="sample-input"&gt;Sample input &lt;a href="#sample-input" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;inRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;t1&amp;gt;&lt;/span&gt;Hello&lt;span class="nt"&gt;&amp;lt;/t1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;t2&amp;gt;&lt;/span&gt;World&lt;span class="nt"&gt;&amp;lt;/t2&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;t3&amp;gt;&lt;/span&gt;One&lt;span class="nt"&gt;&amp;lt;/t3&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/inRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="sample-output"&gt;Sample output &lt;a href="#sample-output" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;outRoot&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;t1&amp;gt;&lt;/span&gt;&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;inRoot&lt;span class="ni"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;t1&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;Hello&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/t1&lt;span class="ni"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;t2&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;World&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/t2&lt;span class="ni"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;t3&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;One&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/t3&lt;span class="ni"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;/inRoot&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/t1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/outRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="xslt"&gt;XSLT &lt;a href="#xslt" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This can be accomplished by using the function oraext:get-content-as-string(element as node-set). This function is really helpful when we are working on BPEL as we can use this function in ASSIGN activity or in TRANSFORM activity using XSLT.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;xmlns:oraext&lt;/strong&gt;=&amp;ldquo;&lt;a href="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc%22"&gt;http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;element as node-set:&lt;/strong&gt; xml data(can be variable, xpath, or a function that returns xml data)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="example"&gt;Example: &lt;a href="#example" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xslt" data-lang="xslt"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;outRoot&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;t1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;oraext:get-content-as-string(/ns0:inRoot)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;t1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;outRoot&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="xquery"&gt;XQuery &lt;a href="#xquery" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Xquery too have a function to convert xml to string i.e. &lt;strong&gt;fn-bea:serialize($arg as item()*)&lt;/strong&gt; as xs:string. This function is really helpful when we are dealing with OSB.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;xmlns:fn-bea=&amp;ldquo;&lt;a href="http://www.bea.com/xquery/xquery-functions%22"&gt;http://www.bea.com/xquery/xquery-functions&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;$arg: Variable containing XML data.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="example-1"&gt;Example: &lt;a href="#example-1" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;$input contains xml data that needs to be converted and assigned to one tag in output payload.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;outRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;t1&amp;gt;&lt;/span&gt;{fn-bea:serialize($input)}&lt;span class="nt"&gt;&amp;lt;/t1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/outRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="string-to-xml"&gt;String to XML &lt;a href="#string-to-xml" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="sample-input-1"&gt;Sample input &lt;a href="#sample-input-1" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;#39;&amp;amp;lt;inRoot&amp;amp;gt;&amp;amp;lt;t1&amp;amp;gt;Hello&amp;amp;lt;/t1&amp;amp;gt;&amp;amp;lt;t2&amp;amp;gt;World&amp;amp;lt;/t2&amp;amp;gt;&amp;amp;lt;t3&amp;amp;gt;One&amp;amp;lt;/t3&amp;amp;gt;&amp;amp;lt;/inRoot&amp;amp;gt;&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="sample-output-1"&gt;Sample output &lt;a href="#sample-output-1" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;inRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;t1&amp;gt;&lt;/span&gt;Hello&lt;span class="nt"&gt;&amp;lt;/t1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;t2&amp;gt;&lt;/span&gt;World&lt;span class="nt"&gt;&amp;lt;/t2&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;t3&amp;gt;&lt;/span&gt;One&lt;span class="nt"&gt;&amp;lt;/t3&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/inRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As we can see in above example that &amp;lt; and &amp;gt; are replaced with &amp;amp;lt; and &amp;amp;gt;. In xml &amp;lt; and &amp;gt; are invalid characters and escaper characters are used in place of these.&lt;/p&gt;
&lt;h2 id="xslt-1"&gt;XSLT &lt;a href="#xslt-1" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In xslt, we can use built in function &lt;strong&gt;oraext:parseXML(stringData)&lt;/strong&gt;.This function is really helpful when we are working on BPEL as we can use this function in ASSIGN activity or in TRANSFORM activity using XSLT.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;xmlns:oraext=&amp;ldquo;&lt;a href="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc%22"&gt;http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;stringData: string value of xml data.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="example-2"&gt;Example: &lt;a href="#example-2" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xslt" data-lang="xslt"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:copy-of&lt;/span&gt; &lt;span class="na"&gt;select&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;oraext:parseXML(&amp;#39;&amp;amp;lt;inRoot&amp;amp;gt;&amp;amp;lt;t1&amp;amp;gt;Hello&amp;amp;lt;/t1&amp;amp;gt;&amp;amp;lt;t2&amp;amp;gt;World&amp;amp;lt;/t2&amp;amp;gt;&amp;amp;lt;t3&amp;amp;gt;One&amp;amp;lt;/t3&amp;amp;gt;&amp;amp;lt;/inRoot&amp;amp;gt;&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;Note: we have used copy-of instead of value-of as we need all the xml nodes to be copied to the target file. If we want to extract the data from xml without xml tags then we can use value-of.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="xquery-1"&gt;XQuery &lt;a href="#xquery-1" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In xquery, we can use fn-bea:inlinedXML($arg as xs:string) as node()*. This function is really helpful when we are dealing with OSB.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;xmlns:fn-bea=&amp;ldquo;&lt;a href="http://www.bea.com/xquery/xquery-functions%22"&gt;http://www.bea.com/xquery/xquery-functions&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;$arg: variable containing xml data in string format.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="example-3"&gt;Example: &lt;a href="#example-3" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;fn-bea:inlinedXML(&amp;#39;&amp;amp;lt;inRoot&amp;amp;gt;&amp;amp;lt;t1&amp;amp;gt;Hello&amp;amp;lt;/t1&amp;amp;gt;&amp;amp;lt;t2&amp;amp;gt;World&amp;amp;lt;/t2&amp;amp;gt;&amp;amp;lt;t3&amp;amp;gt;One&amp;amp;lt;/t3&amp;amp;gt;&amp;amp;lt;/inRoot&amp;amp;gt;&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Remove Empty tags using XSLT</title><link>https://blog.deciphermiddleware.in/posts/remove-empty-tags-using-xslt/</link><pubDate>Sun, 13 Sep 2020 00:00:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/remove-empty-tags-using-xslt/</guid><description>&lt;p&gt;While performing xslt transform on source XML, we may need not to include empty tags in the output xml payload.&lt;/p&gt;
&lt;h2 id="sample-scenarios"&gt;Sample scenarios: &lt;a href="#sample-scenarios" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Target system doesn&amp;rsquo;t want empty tags to come.&lt;/li&gt;
&lt;li&gt;Size of xml payload has become huge due to unwanted empty tags.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="source-xml"&gt;Source XML &lt;a href="#source-xml" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;inRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;t1&amp;gt;&lt;/span&gt;Hello&lt;span class="nt"&gt;&amp;lt;/t1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;t2&amp;gt;&amp;lt;/t2&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;t3&amp;gt;&lt;/span&gt;World&lt;span class="nt"&gt;&amp;lt;/t3&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/inRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="output-xml"&gt;Output XML &lt;a href="#output-xml" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;outRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;a1&amp;gt;&lt;/span&gt;Hello&lt;span class="nt"&gt;&amp;lt;/a1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;a3&amp;gt;&lt;/span&gt;World&lt;span class="nt"&gt;&amp;lt;/a3&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/outRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The optimal way to achieve above result is to use conditional if statement in xslt i.e. xsl:if&lt;/p&gt;
&lt;h3 id="sample-xslt"&gt;Sample XSLT &lt;a href="#sample-xslt" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xslt" data-lang="xslt"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:if&lt;/span&gt; &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/inRoot/t2!=&amp;#39;&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ns0:C1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;xsl:if&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If we have some whitespaces included between tags, the above if-statement may fail and in such scenarios, we may use normalize-space() function in xslt and test condition will become : &lt;strong&gt;&amp;ldquo;normalize-space(/inRoot/t2)!=&amp;rsquo;&amp;rsquo;&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sometimes, we just want to remove empty elements from already transformed xml. Such cases have same input and output schemas. In such scenarios we can take leverage of identity transform using xsl templates and copy methods. See the below sample xslt identity transform to remove empty tags.&lt;/p&gt;
&lt;h3 id="sample-xslt-1"&gt;Sample XSLT: &lt;a href="#sample-xslt-1" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xslt" data-lang="xslt"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;node()|@*&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:if&lt;/span&gt; &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;normalize-space(.) !=&amp;#39;&amp;#39; or ./@* !=&amp;#39;&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:copy&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:copy-of&lt;/span&gt; &lt;span class="na"&gt;select&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;@*&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:apply-templates&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;xsl:copy&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;xsl:if&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;xsl:template&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If we are using xslt in JDev, we need to specify input and output schemas and replace &lt;strong&gt;xsl:template&lt;/strong&gt; tag with the above xsl template code.&lt;/p&gt;</description></item><item><title>Format String oraext:format-string</title><link>https://blog.deciphermiddleware.in/posts/format-string-oraextformat-string/</link><pubDate>Sat, 05 Sep 2020 00:00:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/format-string-oraextformat-string/</guid><description>&lt;p&gt;In our integration world, sometimes target system requires the data from source system to be formatted in some specific format which may require data from various input fields along with custom data. To do so we generally use concat() function to concatenate data from various fields and some user specific inputs.&lt;/p&gt;
&lt;p&gt;Lets take the below example&lt;/p&gt;
&lt;p&gt;Suppose we have a predefined format for the output string:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The &lt;strong&gt;abc&lt;/strong&gt; with employeeID: &lt;strong&gt;1234567&lt;/strong&gt; has been successfully registered in the system.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here, name of the employee(&lt;strong&gt;$empName&lt;/strong&gt;=&amp;lsquo;abc&amp;rsquo;) and employee id(&lt;strong&gt;$empId&lt;/strong&gt;=&amp;lsquo;1234567&amp;rsquo;) are dynamic values. One way to accomplish this, is to use concat().&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;concat(&amp;#39;The &amp;#39;,$empName,&amp;#39; with employeeID: &amp;#39;,$empId,&amp;#39; has been successfully registered in the system.&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Another way we can achieve this, is using oraext:format-string(string,string,string&amp;hellip;)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;oraext:format-string (&amp;#39;The {0} with employeeID: {1} has been successfully registered in the system.&amp;#39;,$empName, $empId)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In above example, first string defines the output format containing place holders({0},{1}). These place holders will be replaced by the subsequent string values(&lt;strong&gt;$empName&lt;/strong&gt;=&amp;lsquo;abc&amp;rsquo;, &lt;strong&gt;$empId&lt;/strong&gt;=&amp;lsquo;1234567&amp;rsquo;). In future, if we need to change the position of these dynamic value in output string, all we need to do is to move the position of these placeholders.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Maximum of 10 arguments are supported for this function.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>DateTime formatting using xp20:format-dateTime()</title><link>https://blog.deciphermiddleware.in/posts/datetime-formatting-using-xp20format/</link><pubDate>Wed, 02 Sep 2020 00:00:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/datetime-formatting-using-xp20format/</guid><description>&lt;h2 id="xsdatetime-format"&gt;xs:dateTime Format &lt;a href="#xsdatetime-format" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In XML, we generally use xs:dateTime(xs:xmlns=&amp;ldquo;&lt;a href="http://www.w3.org/2001/XMLSchema%22"&gt;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;/a&gt;) data type to store date time data. The generic representation of date time, that is supported by xs:dateTime in xml:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;YYYY-MM-DDThh:mm:ss[.SSS][Z|(+|-)hh:mm]&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="example"&gt;Example: &lt;a href="#example" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;2019-09-11T10:16:31.943+05:30&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;YYYY&lt;/td&gt;
&lt;td&gt;represents a 4-digit year&lt;/td&gt;
&lt;td&gt;2019&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MM&lt;/td&gt;
&lt;td&gt;represents a 2-digit month&lt;/td&gt;
&lt;td&gt;09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DD&lt;/td&gt;
&lt;td&gt;represents 2-digit date&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hh&lt;/td&gt;
&lt;td&gt;represents 2-digit hours&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mm&lt;/td&gt;
&lt;td&gt;represents minutes in 2-digits&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ss&lt;/td&gt;
&lt;td&gt;represents seconds in 2-digits&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSS&lt;/td&gt;
&lt;td&gt;represents milliseconds&lt;/td&gt;
&lt;td&gt;943&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T&lt;/td&gt;
&lt;td&gt;represents time separator&lt;/td&gt;
&lt;td&gt;T&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;represents UTC time zone or 0 time zone offset&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(+|-)&lt;/td&gt;
&lt;td&gt;hh:mm represents time zone offset&lt;/td&gt;
&lt;td&gt;+5:30&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Few more valid &lt;strong&gt;examples&lt;/strong&gt;: 2019-09-11T21:32:52, 2019-09-11T21:32:52+02:00, 2019-09-11T19:32:52Z, 2019-09-11T19:32:52+00:00, 2019-09-11T21:32:52.11179&lt;/p&gt;
&lt;p&gt;While working with different systems, we may come across such systems, which require date time in some different formats other than default format as supported by xs:dateTime. To over come such scenarios, function is available in OIC(Oracle Integration Cloud) and Oracle SOA&lt;/p&gt;
&lt;h2 id="format-datetime"&gt;Format DateTime &lt;a href="#format-datetime" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;xp20:format-dateTime($dateTime as string, $format as string) xmlns:xp20=&amp;quot;http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;$dateTime&lt;/strong&gt; should contain date time value as per xs:dateTime data type as as string eg: &amp;lsquo;2019-09-11T10:16:31.943+05:30&amp;rsquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;$format&lt;/strong&gt; should contain output format to which we need to convert to. For e.g. if we want output to be &amp;lsquo;11/09/2019&amp;rsquo; then value of $format should be &lt;code&gt;[D01]/[M01]/[Y001]&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;xp20:format-dateTime('2019-09-11T10:16:31.943+05:30', '[D01]/[M01]/[Y001]')&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To format current date time, we can use xp20:current-dateTime() in $dateTime&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;xp20:format-dateTime(xp20:current-dateTime(), &amp;#39;[D01]/[M01]/[Y001]&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="formatting-codes"&gt;Formatting Codes: &lt;a href="#formatting-codes" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Below are some important codes which can be helpful in generating desired format for target application.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Sample dateTime:&lt;/strong&gt;&lt;/em&gt; &lt;code&gt;2019-09-03T15:16:31.943+05:30&lt;/code&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Example Output&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[Y001]&lt;/td&gt;
&lt;td&gt;4 digit year&lt;/td&gt;
&lt;td&gt;2019&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[Y01]&lt;/td&gt;
&lt;td&gt;2 digit year&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[M01]&lt;/td&gt;
&lt;td&gt;2 digit month&lt;/td&gt;
&lt;td&gt;09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[D01]&lt;/td&gt;
&lt;td&gt;2 digit date&lt;/td&gt;
&lt;td&gt;03&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[H01]&lt;/td&gt;
&lt;td&gt;2 digit hour in 24 hour clock&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[h01]&lt;/td&gt;
&lt;td&gt;2 digit hour in 12 hour clock&lt;/td&gt;
&lt;td&gt;03&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[m01]&lt;/td&gt;
&lt;td&gt;2-digit minutes&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[s01]&lt;/td&gt;
&lt;td&gt;2-digit seconds&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[f001]&lt;/td&gt;
&lt;td&gt;3-digit milliseconds&lt;/td&gt;
&lt;td&gt;943&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[Z]&lt;/td&gt;
&lt;td&gt;Time zone offset in the form (+|-)hhmm&lt;/td&gt;
&lt;td&gt;+0530&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[z]&lt;/td&gt;
&lt;td&gt;Time zone offset in the form GMT(+|-)hh:mm&lt;/td&gt;
&lt;td&gt;GMT+05:30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[Dwo]&lt;/td&gt;
&lt;td&gt;Word for ordinal value of day&lt;/td&gt;
&lt;td&gt;third&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[dwo]&lt;/td&gt;
&lt;td&gt;The day of the year, represented in ordinal words&lt;/td&gt;
&lt;td&gt;second hundred and forty-sixth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[MNn]&lt;/td&gt;
&lt;td&gt;Capitalized month name&lt;/td&gt;
&lt;td&gt;September&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[P]&lt;/td&gt;
&lt;td&gt;am/pm&lt;/td&gt;
&lt;td&gt;pm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[PX]&lt;/td&gt;
&lt;td&gt;Uppercase am/pm&lt;/td&gt;
&lt;td&gt;PM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[FNn]&lt;/td&gt;
&lt;td&gt;Capitalized weekday name&lt;/td&gt;
&lt;td&gt;Tuesday&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[MNn,a-b]&lt;/td&gt;
&lt;td&gt;Capitalized month name having atleast &amp;ldquo;a&amp;rdquo; charcters and atmost &amp;ldquo;b&amp;rdquo; characters [MNn,3-3]:&lt;/td&gt;
&lt;td&gt;Sep&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item></channel></rss>