xsl-list
[Top] [All Lists]

[xsl] Help with transforming unique set of data in XSLT 2.0

2010-07-27 02:29:40
Hi All,

I am having difficulty get the following stylesheet to transform unique set of 
data once:

1     <xsl:template match="/">
2          <xsl:apply-templates select="document('E:/employee.xml')/ns:html"/>
3     </xsl:template>
4
5     <xsl:template match="ns:html">
6        <employee>
7           <xsl:for-each 
select="ns:body/ns:div[(_at_)id='content']/ns:table[(_at_)class='sresults']/ns:tr/ns:td/ns:a">

8              <first_name><xsl:value-of 
select="substring-before(@given_name,',')"/></first_name>
9              <surname><xsl:value-of select="@family_name"/></surname>
10            <sex><xsl:value-of select="@gender"/></sex>
11            </xsl:for-each>
12        </employee>
13    </xsl:template>

The following output generated duplicated set of identical transformed data 
when 
using <xsl:for-each>:

<?xml version="1.0" encoding="UTF-8"?>
<employee>
  <first_name>John</first_name>
  <surname>smith</surname>
  <sex>M</sex>
  <first_name>Kelly</first_name>
  <surname>Jones</surname>
  <sex>F</sex>
</employee>

<?xml version="1.0" encoding="UTF-8"?>
<employee>
  <first_name>John</first_name>
  <surname>smith</surname>
  <sex>M</sex>
  <first_name>Kelly</first_name>
  <surname>Jones</surname>
  <sex>F</sex>
</employee>

I tried the following changes after suspecting that the cause was from the 
<xsl:for-each> statement:

1   <xsl:template match="/">
2   <xsl:apply-templates select="document('E:/employee.xml')/ns:html"/>
3   </xsl:template>
4
5   <xsl:template match="ns:html">
6      <employee>
7        <xsl:variable name="employee_data" 
select="ns:body/ns:div[(_at_)id='content']/ns:table[(_at_)class='sresults']/ns:tr/ns:td/ns:a"/>

8        <xsl:apply-templates select="$employee_data"/>
9        <first_name><xsl:value-of 
select="substring-before(@title,',')"/></first_name>
10      <surname><xsl:value-of select="@href"/></surname>
11      <sex><xsl:value-of select="@gender"/></sex>
12    </employee>
13 </xsl:template>

Below is the output without using <xsl:for-each>:

<?xml version="1.0" encoding="UTF-8"?>
<employee>
  John Kelly
  <firstname />
  <surname />
  <sex/>>
</employee>

<?xml version="1.0" encoding="UTF-8"?>
<employee>
  John Kelly
  <firstname />
  <surname />
  <sex/>>
</employee>

Any ideas on what is causing the duplications and why is the second stylesheet 
picking up the firstnames of 2 separate xml documents in the wrong place?

The desire output is just a single entry of each record such as the following:

<?xml version="1.0" encoding="UTF-8"?>
<employee>
  <first_name>John</first_name>
  <surname>smith</surname>
  <sex>M</sex>
  <first_name>Kelly</first_name>
  <surname>Jones</surname>
  <sex>F</sex>
</employee>

Thanks a lot,

Jack


      


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>