Subject: Re: [xsl] value-of select problem (XSLT 2.0 solution) From: "Jay Bryant" <jay@xxxxxxxxxxxx> Date: Tue, 15 Aug 2006 17:25:43 -0500 |
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@xxxxxxxxxxxxxxx> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> 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>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] value-of select problem, cchelius | Thread | RE: [xsl] value-of select problem, Michael Kay |
Re: [xsl] Dividing a long document , Jay Bryant | Date | [xsl] Namespace prefixes in Schemas, António Mota |
Month |