Re: [xml-dev] XSLT stylesheet looping through the same node (recursion?)
Hi David,
Thanks for your valuable suggestion with the following output:
( 1 ) <p xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/1999/xhtml">
( 2 ) <strong>Interest:</strong>
( 3 ) <br clear="none" />
( 4 ) Tennis
( 5 ) </p>
( 6 ) <p xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/1999/xhtml">
( 7 ) <strong>Interest:</strong>
( 8 ) <br clear="none" />
( 9 ) Movie
( 10 )</p>
( 11 )<p xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/1999/xhtml">
( 12 ) <strong>Interest:</strong>
( 13) <br clear="none" />
( 14) Swimming
( 15 )</p>
( 16 ) >
</area>
( a ) <xsl:stylesheet version="1.0"
( b ) xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
( c ) xmlns:ns="http://www.w3.org/1999/xhtml"
( d ) exclude-result-prefixes="ns">
( e )
( f ) <xsl:template match="/">
( g )<xsl:copy-of
( h )select="/ns:html/ns:body/ns:div[@id='content']/ns:p[contains(ns:strong,'Interest:')]"/>
( i ) </xsl:template>
( j ) </xsl:stylesheet>
This is great except that I would like to achieve the following control over what comes out:
( i ) Only want the values of the current node. ie <interest>Tennis</interest>, <interest>Movie</interest>,<interest>Swimming</interest>. In other word, no lines 1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 15, 16.
( ii ) I am also having difficulty getting another list of element values that comes immediately after the <Interest> element. This may be due to the context node having been changed by when running the above stylesheet.
( iii ) There are other element values that I want to retrieve from the same document, where they are made up of either single value as well as multiples. I will need to some how include the above segment codes into the following current working stylesheet responsible for retrieving other single element value(s), using the current context node where possible:
<xsl:template match="/">
<area>
<xsl:for-each select="/ns:html/ns:body/ns:div[@id='content']/ns:p/ns:strong">
<xsl:if test="contains(.,'Firstname:')">
<xsl:choose>
<xsl:when test="contains(.,'Firstname:')">
<firstname><xsl:value-of select="../ns:a"/></firstname>
</xsl:when>
<xsl:otherwise>
<firstname>Unknown</firstname>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<xsl:if test="contains(.,'Surname:')">
<xsl:choose>
<xsl:when test="contains(.,'Surname:')">
<surname><xsl:value-of select="../text()"/></surname>
</xsl:when>
<xsl:otherwise>
<surname>Unknown</surname>
</xsl:otherwise>
</xsl:choose>
......
Thanks a lot for your support,
Jack
From: David Carlisle <[email protected]>
To: [email protected]
Cc: [email protected]
Sent: Tuesday, 27 January, 2009 12:43:06 AM
Subject: Re: [xml-dev] XSLT stylesheet looping through the same node (recursion?)
It would be much easier to look at your examples if you posted xml
rather than a screen scrape of IE (I would guess) view source, which is
full of spurious + - and spacing characters that make the result
unprocessable. Also your posted stylesheet is not well formed (no closing
</area>) so it presumably isn't the stylesheet that produced the posted
resut?
From your description It may be that you just want
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns="http://www.w3..org/1999/xhtml"
exclude-result-prefixes="ns">
<xsl:template match="/">
<xsl:copy-of
select="/ns:html/ns:body/ns:div[@id='content']/ns:p[contains(ns:strong,'Interest:')]"/>
</xsl:template>
</xsl:stylesheet>
which returns all p elements that match the supplied xpath.
David
________________________________________________________________________
The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.
This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs.
________________________________________________________________________
Stay connected to the people that matter most with a smarter inbox. Take a look.