xsl-list
[Top] [All Lists]

Re: [xsl] value-of select problem (XSLT 2.0 solution)

2006-08-15 16:02:06
If you can use XSLT 2.0, this is an easy problem to solve. Here's how.

I made the following XML file from your sample input:

<?xml version="1.0" encoding="UTF-8"?>
<author>
  <authorFname>John</authorFname><authorLname>Dai</authorLname>,
<authorDegree>MD</authorDegree>;

<authorFname>Jane</authorFname><authorMname>Austin</authorMname><authorLname
Smith</authorLname>
</author>

and wrote the following transform for it:

<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

<xsl:output method="xml" indent="yes" />

  <xsl:template match="/">
    <out>
      <xsl:for-each-group select="author" group-starting-with="authorFname">
        <xsl:apply-templates select="current-group()"/>
      </xsl:for-each-group>
    </out>
  </xsl:template>

  <xsl:template match="authorFname">
    <FirstName><xsl:value-of select="."/></FirstName>
  </xsl:template>

  <xsl:template match="authorMname">
    <MiddleName><xsl:value-of select="."/></MiddleName>
  </xsl:template>

  <xsl:template match="authorLname">
    <LastName><xsl:value-of select="."/></LastName>
  </xsl:template>

  <xsl:template match="authorDegree">
    <Degree><xsl:value-of select="."/></Degree>
  </xsl:template>

  <!-- Note: The default template is handling the text nodes that contain
the punctuation -->

</xsl:stylesheet>

and got the following output (from Saxon 8):

<?xml version="1.0" encoding="UTF-8"?>
<out>
  <FirstName>John</FirstName>
   <LastName>Dai</LastName>, <Degree>MD</Degree>;
  <FirstName>Jane</FirstName>
   <MiddleName>Austin</MiddleName>
   <LastName>Smith</LastName>
</out>

Jay Bryant
Bryant Communication Services
----- Original Message ----- 
From: <cchelius(_at_)agitraining(_dot_)com>
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Sent: Tuesday, August 15, 2006 4:35 PM
Subject: [xsl] value-of select problem


I have included a snippet from my xslt that I am having difficulties with.
My source XML can contain several authors names but those names don't have
to contain a middle name. The problem with my xslt is that when an author
doesn't contain a middle name it will pull the middle name from the next
author after it. Obviously this is no good as it creates a name that is
incorrect. I'm not sure how to tell the xslt that if there is no middle
name not to grab <authorMname from the next author. Any ideas?

XML Code Sample:

<author><authorFname>John</authorFname>
            <authorLname>Dai</authorLname>,
<authorDegree>MD</authorDegree>;

<authorFname>Jane</authorFname><authorMname>Austin</authorMname><authorLname
Smith</authorLname></author>


XSLT Sample:

  <xsl:for-each select="Story/author/authorFname">
                        <!-- Adjusted to allow for multiple authors -->
                        <Author>
                            <FirstName>
                                <xsl:value-of select="."/>
                            </FirstName>
                            <MiddleName>
                                <xsl:value-of
select="following-sibling::authorMname[1]"/>
                            </MiddleName>
                            <LastName>
                                <xsl:value-of
select="following-sibling::authorLname[1]"/>
                            </LastName>
                            <Suffix>
                                <xsl:value-of
select="following-sibling::authorSuffix[1]"/>
                            </Suffix>
                            <Affiliation>
                                <xsl:value-of
select="following-sibling::authorAffiliation[1]"/>
                            </Affiliation>
                        </Author>
                    </xsl:for-each>







--~------------------------------------------------------------------
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>
--~--




--~------------------------------------------------------------------
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>