1

I want to modify the following xml using XSLT:

 <?xml version="1.0" encoding="UTF-8"?>
    <response>
       <folder>
          <CRDATTIM>2012-08-31-08.26.11.805400</CRDATTIM>
          <RECORDCD>F</RECORDCD>
       </folder>
       <case>
          <CRDATTIM>2014-03-26-05.22.22.339840</CRDATTIM>
          <RECORDCD>C</RECORDCD>
          <issue>
             <KEY>2014-03-26-05.22.22.193840T01</KEY>
             <PRTY>999</PRTY>
          </issue>
       </case>
       <folder>
          <CRDATTIM>2012-11-06-23.57.08.089400</CRDATTIM>
          <RECORDCD>F</RECORDCD>
       </folder>
       <case>
          <CRDATTIM>2014-04-29-06.58.32.992840</CRDATTIM>
          <RECORDCD>C</RECORDCD>
          <issue>
             <KEY>2014-04-29-06.58.31.305840T01</KEY>
             <PRTY>999</PRTY>
          </issue>
       </case>
</response>

Now, I want to add a new node <sort> to the root node <response> such that the node <sort> will contain two children <field /> and <ascending /> .But, here for each case in the above xml, the two tags <field /> and <ascending /> should be added to the <sort> node.For example in the above xml, there are two cases(<case>). So, the node <sort> should have two <field /> tags and <ascending /> tags. Ultimately, My final xml should look like below:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <folder>
      <CRDATTIM>2012-08-31-08.26.11.805400</CRDATTIM>
      <RECORDCD>F</RECORDCD>
   </folder>
   <case>
      <CRDATTIM>2014-03-26-05.22.22.339840</CRDATTIM>
      <RECORDCD>C</RECORDCD>
      <issue>
         <KEY>2014-03-26-05.22.22.193840T01</KEY>
         <PRTY>999</PRTY>
      </issue>
   </case>
   <folder>
      <CRDATTIM>2012-11-06-23.57.08.089400</CRDATTIM>
      <RECORDCD>F</RECORDCD>
   </folder>
   <case>
      <CRDATTIM>2014-04-29-06.58.32.992840</CRDATTIM>
      <RECORDCD>C</RECORDCD>
      <issue>
         <KEY>2014-04-29-06.58.31.305840T01</KEY>
         <PRTY>999</PRTY>
      </issue>
   </case>
   <sort>
      <field />
      <ascending />
      <field />
      <ascending />
      <field />
   </sort>
</response>

Please share your thoughts on how to achieve the desired functionality. Please let me know if my question is not clear. Thanks in advance.

1 Answer 1

2

You can use an identity template to copy the original XML and put a <sort> element on the end. See next tutorial: http://www.xmlplease.com/xsltidentity

Here is an XSLT example:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="response">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
            <sort>
                <xsl:for-each select="case">
                    <field />
                    <ascending />
                </xsl:for-each>
            </sort>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.