| Subject: Re: [xsl] nesting flat varaible structures? From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> Date: Fri, 23 Sep 2011 16:39:24 -0400 | 
I'm trying to use XSLT to do a conversion from one version of the S1000D spec to another. So in the older version you can have this:
<reqpers> <person man="1"/> <perscat category="tech"/> <trade>foo</trade> <person man="2"/> <perscat category="techa"/> <perskill skill="sk05"/> <trade>bar</trade> <esttime>23</esttime> </reqpers>
In the newer version you have a nested structure:
<reqPersons> <person man="1"> <personCategory personCategoryCode="tech"/> <trade>foo</trade> </person> <person man="2"> <personCategory personCategoryCode="techa"/> <personSkill skillLevelCode="sk05"/> <trade>bar</trade> <esttime>23</esttime> </person> <reqPersons>
I can use the following sibling to pull the elements under a new <person> tag, but the problem is that none of the following elements are requried.
I'm working in 2.0. Any ideas on how to correct the results?
~/t/ftemp $ cat dan.xml
<?xml version="1.0" encoding="UTF-8"?>
<reqpers>
<person man="1"/>
<perscat category="tech"/>
<trade>foo</trade>
<person man="2"/>
<perscat category="techa"/>
<perskill skill="sk05"/>
<trade>bar</trade>
<esttime>23</esttime>
</reqpers>
~/t/ftemp $ xslt2 dan.xml dan.xsl
<?xml version="1.0" encoding="UTF-8"?>
<reqPersons>
   <person man="1">
      <perscat category="tech"/>
      <trade>foo</trade>
   </person>
   <person man="2">
      <perscat category="techa"/>
      <perskill skill="sk05"/>
      <trade>bar</trade>
      <esttime>23</esttime>
   </person>
</reqPersons>~/t/ftemp $
~/t/ftemp $ cat dan.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="2.0"><xsl:template match="reqpers">
  <reqPersons>
    <!--the following assumes <person> is the first child-->
    <xsl:for-each-group select="*" group-starting-with="person">
      <!--preserve the element-->
      <xsl:copy>
        <xsl:copy-of select="@*"/>
        <!--move sibling elements in the group underneath the first-->
        <xsl:copy-of select="current-group()[position()>1]"/>
      </xsl:copy>
    </xsl:for-each-group>
  </reqPersons>
</xsl:template></xsl:stylesheet> ~/t/ftemp $
-- Contact us for world-wide XML consulting and instructor-led training Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Google+ profile: https://plus.google.com/116832879756988317389/about Legal business disclaimers: http://www.CraneSoftwrights.com/legal
| Current Thread | 
|---|
| 
 | 
| <- Previous | Index | Next -> | 
|---|---|---|
| RE: [xsl] nesting flat varaible str, Echlin, Robert | Thread | Re: [xsl] nesting flat varaible str, Dan Vint | 
| RE: [xsl] nesting flat varaible str, Echlin, Robert | Date | Re: [xsl] nesting flat varaible str, Liam R E Quin | 
| Month |