XML : XML to XML using XSLT to add element

I have the following XML document which I need to convert to a new XML document with extra elements.

      <doc>          <colleges>                         <college>                             <college-name>harvard</college-name>                                 <members>                          <!-- College staff-->                          <staff>                                  <employee id="2200010001" contract="full-time"/>                                                           <employee id="2200010002" contract="temp"/>                          </staff>                          <!-- College students -->                          <students>                              <student id="1000020001"/>                              <student id="1000020003"/>                          </students>                      </members>              </college>              <college>                             <college-name>wharton</college-name>                                 <members>                          <!-- College staff-->                          <staff>                                  <employee id="2200010003" contract="full-time"/>                                                           <employee id="2200010004" contract="temp"/>                          </staff>                          <!-- College students -->                          <students>                                                             <student id="1000020002"/>                          </students>                      </members>                  </college>          </colleges>          <students>                              <student id="1000020001">                          <personal>                                    <name>                          <firstname>Hillary</firstname>                          <lastname>Clinton</lastname>                      </name>                                          <!-- Student contact information -->                      <contact-information>                          <phone>+12123004000</phone>                          <email>hillary@lostemail.com</email>                      </contact-information>                  </personal>                  <registration>                      <!-- Student university information -->                                                           <degree>                          <type>undergrad</type>                          <status>1</status>                          <matriculated>yes</matriculated>                                          </degree>                      <degree>                          <type>masters</type>                          <status>1</status>                          <matriculated>yes</matriculated>                                          </degree>                  </registration>              </student">              <student id="1000020002">                  <personal>                                    <name>                          <firstname>Donald</firstname>                          <lastname>Trump</lastname>                      </name>                      <!-- Student contact information -->                      <contact-information>                          <phone>+12123004001</phone>                          <email>drumf@makeemailgreatagain.com</email>                      </contact-information>                  </personal>                  <registration>                      <!-- Student university information -->                                                            <degree>                          <type>undergrad</type>                          <status>1</status>                          <matriculated>yes</matriculated>                                          </degree>                      <degree>                          <type>masters</type>                          <status>1</status>                          <matriculated>yes</matriculated>                                          </degree>                  </registration>              </student">          </students>      </doc>    

In the student element I need to extract the college name and insert it as element, so student section shows as following: (The remaining part is unchanged, I just added student section for simplicity and readability)

      <student id="1000020001">                  <personal>                            <name>                  <firstname>Hillary</firstname>                  <lastname>Clinton</lastname>              </name>                                  <!-- Student contact information -->              <contact-information>                  <phone>+12123004000</phone>                  <email>hillary@lostemail.com</email>              </contact-information>          </personal>              <registration>                  <!-- Student university information -->                    <college-name>harvard</college-name>                                 <degree>                      <type>undergrad</type>                      <status>1</status>                      <matriculated>yes</matriculated>                                      </degree>                  <degree>                      <type>masters</type>                      <status>1</status>                      <matriculated>yes</matriculated>                                      </degree>              </registration>      </student">    

I'm using XSLT using Identity rule, but my college-name is empty. Any suggestions?

  <?xml version="1.0" encoding="UTF-8"?>  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"      xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="1.0">      <xsl:output omit-xml-declaration="yes" indent="yes"/>      <xsl:strip-space elements="*"/>        <xsl:template match="node()|@*">          <xsl:copy>              <xsl:apply-templates select="node()|@*"/>          </xsl:copy>      </xsl:template>      <!-- Student registration-->      <xsl:template match="student/registration">          <registration>              <xsl:apply-templates select="@* | *"/>              <xsl:element name="college-name">                  <xsl:call-template name="extractCollegeName">                          <xsl:with-param name="student-id" select="student/@id"/>                  </xsl:call-template>              </xsl:element>          </registration>      </xsl:template>        <!-- check student id for each college -->      <xsl:template name="extractCollegeName">          <xsl:param name="student-id"/>          <xsl:for-each select="/doc/colleges/college">              <xsl:if test="$student-id = members/students/student/@id">                  <xsl:value-of select="college-name"/>              </xsl:if>          </xsl:for-each>      </xsl:template>    </xsl:stylesheet>    

No comments:

Post a Comment