Click here to Skip to main content
15,886,110 members
Home / Discussions / XML / XSL
   

XML / XSL

 
QuestionHow to create XSD without repeating myself Pin
Mikael Sterley28-Apr-16 3:46
Mikael Sterley28-Apr-16 3:46 
AnswerRe: How to create XSD without repeating myself Pin
George Jonsson13-Jun-16 3:08
professionalGeorge Jonsson13-Jun-16 3:08 
AnswerRe: How to create XSD without repeating myself Pin
Bernhard Hiller5-Sep-16 21:08
Bernhard Hiller5-Sep-16 21:08 
Questiongenerating a unique value and adding it to a group of elements Pin
Drew Church27-Mar-16 14:11
Drew Church27-Mar-16 14:11 
AnswerRe: generating a unique value and adding it to a group of elements Pin
Jim Meadors27-Mar-16 18:29
Jim Meadors27-Mar-16 18:29 
GeneralRe: generating a unique value and adding it to a group of elements Pin
Drew Church28-Mar-16 2:07
Drew Church28-Mar-16 2:07 
GeneralRe: generating a unique value and adding it to a group of elements Pin
Jim Meadors28-Mar-16 19:44
Jim Meadors28-Mar-16 19:44 
GeneralRe: generating a unique value and adding it to a group of elements Pin
Drew Church29-Mar-16 3:26
Drew Church29-Mar-16 3:26 
Thank you Jim for your help but I think I solved the problem. I am a programmer and believe me I would have had this done in C# or VB sprinkle in some LINQ in less than an hour if I had my way. Loading it into Excel does work and is a valid solution, I just wanted to try to solve it with XSLT. I also need to automate this for everyday mail merges so Access is a nice easy solution for the company I work for. So below is my code:

XML
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
 
  <!--Identity template, provides default behavior that copies all content into the output -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  
   <!--Add a root element-->
   <xsl:template match="/">
        <dataroot>
            <xsl:apply-templates select="@*|node()"/>
        </dataroot>
    </xsl:template>
        
  <!--match an envelope node and create an id element with a unique identifier-->
  <xsl:template match="envelope">
    <xsl:copy>
        <xsl:element name="id">
          <xsl:value-of select="generate-id(.)"/> 
        </xsl:element>
      <xsl:apply-templates select="@*|node()">
          <xsl:with-param name="prev_id" select="generate-id()"/>
        </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

  <!--match a person element, create an element named id and copy the unique value that was created in the parent envelope element into the id element-->
  <xsl:template match="person">
    <xsl:param name="prev_id"/>
    <xsl:copy>
      <xsl:variable name="cur_id">
        <xsl:value-of select="$prev_id"/>/>
      </xsl:variable>
      <xsl:element name="id"><xsl:value-of select="$cur_id"/></xsl:element>
      <xsl:apply-templates select="@*|node()">
        <xsl:with-param name="prev_id" select="$cur_id"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>
  
  <!--match a contact element, create an element named id and copy the unique value that was created in the parent envelope element into the id element-->
  <xsl:template match="contact">
    <xsl:param name="prev_id"/>
    <xsl:copy>
      <xsl:variable name="cur_id">
        <xsl:value-of select="$prev_id"/>/>
      </xsl:variable>
      <xsl:element name="id"><xsl:value-of select="$cur_id"/></xsl:element>
      <xsl:apply-templates select="@*|node()">
        <xsl:with-param name="prev_id" select="$cur_id"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

  <!--match a address element, create an element named id and copy the unique value that was created in the parent envelope element into the id element-->
  <xsl:template match="address">
    <xsl:param name="prev_id"/>
    <xsl:copy>
      <xsl:variable name="cur_id">
        <xsl:value-of select="$prev_id"/>/>
      </xsl:variable>
      <xsl:element name="id"><xsl:value-of select="$cur_id"/></xsl:element>
      <xsl:apply-templates select="@*|node()">
        <xsl:with-param name="prev_id" select="$cur_id"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

  <!--match a notice element, create an element named id and copy the unique value that was created in the parent envelope element into the id element-->
  <xsl:template match="notice">
    <xsl:param name="prev_id"/>
    <xsl:copy>
      <xsl:variable name="cur_id">
        <xsl:value-of select="$prev_id"/>/>
      </xsl:variable>
      <xsl:element name="id"><xsl:value-of select="$cur_id"/></xsl:element>
      <xsl:apply-templates select="@*|node()">
        <xsl:with-param name="prev_id" select="$cur_id"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

GeneralRe: generating a unique value and adding it to a group of elements Pin
Jim Meadors29-Mar-16 19:12
Jim Meadors29-Mar-16 19:12 
Questiontheory xml . help me Pin
Member 1216400424-Nov-15 5:29
Member 1216400424-Nov-15 5:29 
AnswerRe: theory xml . help me Pin
George Jonsson4-Dec-15 20:45
professionalGeorge Jonsson4-Dec-15 20:45 
QuestionXML parsing error --> #10; Pin
NJdotnetdev14-Jul-15 2:23
NJdotnetdev14-Jul-15 2:23 
AnswerRe: XML parsing error --> #10; Pin
User 41802545-Aug-15 2:27
User 41802545-Aug-15 2:27 
QuestionNETIQ Product Help needed. Pin
Member 1156144127-Mar-15 10:24
Member 1156144127-Mar-15 10:24 
AnswerRe: NETIQ Product Help needed. Pin
Richard Andrew x6427-Mar-15 14:14
professionalRichard Andrew x6427-Mar-15 14:14 
AnswerRe: NETIQ Product Help needed. Pin
Abhipal Singh19-May-15 5:07
professionalAbhipal Singh19-May-15 5:07 
Questioncopying attribute from one node to other Pin
ramina sen9-Feb-15 0:10
ramina sen9-Feb-15 0:10 
QuestionXSL: how to properly reference to xml field? Pin
Maciej Los16-Nov-14 9:05
mveMaciej Los16-Nov-14 9:05 
AnswerRe: XSL: how to properly reference to xml field? Pin
Richard Deeming17-Nov-14 2:52
mveRichard Deeming17-Nov-14 2:52 
GeneralRe: XSL: how to properly reference to xml field? Pin
Maciej Los17-Nov-14 4:25
mveMaciej Los17-Nov-14 4:25 
QuestionHow to get behavior similar to the obsoleted XmlValidatingReader Pin
John Whitmire30-Oct-14 3:53
professionalJohn Whitmire30-Oct-14 3:53 
AnswerRe: How to get behavior similar to the obsoleted XmlValidatingReader Pin
Gerry Schmitz30-Oct-14 21:21
mveGerry Schmitz30-Oct-14 21:21 
GeneralRe: How to get behavior similar to the obsoleted XmlValidatingReader Pin
John Whitmire3-Nov-14 3:04
professionalJohn Whitmire3-Nov-14 3:04 
SuggestionRe: How to get behavior similar to the obsoleted XmlValidatingReader Pin
John Whitmire6-Nov-14 2:47
professionalJohn Whitmire6-Nov-14 2:47 
QuestionVB.NET creat new XML Pin
Dereak12-Oct-14 17:43
Dereak12-Oct-14 17:43 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.