I am receiving a 3rd party feed of which I cannot be certain of the namespace so I am currently having to use the local-name() function in my XSLT to get the element values. However I need to get an attribute from one such element and I don’t know how to do this when the namespaces are unknown (hence need for local-name() function).
N.B. I am using .net 2.0 to process the XSLT
Here is a sample of the XML:
<?xml version='1.0' encoding='UTF-8'?> <feed xmlns='http://www.w3.org/2005/Atom'> <id>some id</id> <title>some title</title> <updated>2008-09-11T15:53:31+01:00</updated> <link rel='self' href='http://www.somefeedurl.co.uk' /> <author> <name>some author</name> <uri>http://someuri.co.uk</uri> </author> <generator uri='http://aardvarkmedia.co.uk/'>AardvarkMedia script</generator> <entry> <id>http://soemaddress.co.uk/branded3/80406</id> <title type='html'>My Ttile</title> <link rel='alternate' href='http://www.someurl.co.uk' /> <updated>2008-02-13T00:00:00+01:00</updated> <published>2002-09-11T14:16:20+01:00</published> <category term='mycategorytext' label='restaurant'>Test</category> <content type='xhtml'> <div xmlns='http://www.w3.org/1999/xhtml'> <div class='vcard'> <p class='fn org'>some title</p> <p class='adr'> <abbr class='type' title='POSTAL' /> <span class='street-address'>54 Some Street</span> , <span class='locality' /> , <span class='country-name'>UK</span> </p> <p class='tel'> <span class='value'>0123456789</span> </p> <div class='geo'> <span class='latitude'>51.99999</span> , <span class='longitude'>-0.123456</span> </div> <p class='note'> <span class='type'>Review</span> <span class='value'>Some content</span> </p> <p class='note'> <span class='type'>Overall rating</span> <span class='value'>8</span> </p> </div> </div> </content> <category term='cuisine-54' label='Spanish' /> <Point xmlns='http://www.w3.org/2003/01/geo/wgs84_pos#'> <lat>51.123456789</lat> <long>-0.11111111</long> </Point> </entry> </feed>
This is XSLT
<?xml version='1.0' encoding='UTF-8' ?> <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:atom='http://www.w3.org/2005/Atom' xmlns:wgs='http://www.w3.org/2003/01/geo/wgs84_pos#' exclude-result-prefixes='atom wgs'> <xsl:output method='xml' indent='yes'/> <xsl:key name='uniqueVenuesKey' match='entry' use='id'/> <xsl:key name='uniqueCategoriesKey' match='entry' use='category/@term'/> <xsl:template match='/'> <locations> <!-- Get all unique venues --> <xsl:for-each select='/*[local-name()='feed']/*[local-name()='entry']'> <xsl:variable name='CurrentVenueKey' select='*[local-name()='id']' ></xsl:variable> <xsl:variable name='CurrentVenueName' select='*[local-name()='title']' ></xsl:variable> <xsl:variable name='CurrentVenueAddress1' select='*[local-name()='content']/*[local-name()='div']/*[local-name()='div']/*[local-name()='p'][@class='adr']/*[local-name()='span'][@class='street-address']' ></xsl:variable> <xsl:variable name='CurrentVenueCity' select='*[local-name()='content']/*[local-name()='div']/*[local-name()='div']/*[local-name()='p'][@class='adr']/*[local-name()='span'][@class='locality']' ></xsl:variable> <xsl:variable name='CurrentVenuePostcode' select='*[local-name()='postcode']' ></xsl:variable> <xsl:variable name='CurrentVenueTelephone' select='*[local-name()='telephone']' ></xsl:variable> <xsl:variable name='CurrentVenueLat' select='*[local-name()='Point']/*[local-name()='lat']' ></xsl:variable> <xsl:variable name='CurrentVenueLong' select='*[local-name()='Point']/*[local-name()='long']' ></xsl:variable> <xsl:variable name='CurrentCategory' select='WHATDOIPUTHERE'></xsl:variable> <location> <locationName> <xsl:value-of select = '$CurrentVenueName' /> </locationName> <category> <xsl:value-of select = '$CurrentCategory' /> </category> <description> <xsl:value-of select = '$CurrentVenueName' /> </description> <venueAddress> <streetName> <xsl:value-of select = '$CurrentVenueAddress1' /> </streetName> <town> <xsl:value-of select = '$CurrentVenueCity' /> </town> <postcode> <xsl:value-of select = '$CurrentVenuePostcode' /> </postcode> <wgs84_latitude> <xsl:value-of select = '$CurrentVenueLat' /> </wgs84_latitude> <wgs84_longitude> <xsl:value-of select = '$CurrentVenueLong' /> </wgs84_longitude> </venueAddress> <venuePhone> <phonenumber> <xsl:value-of select = '$CurrentVenueTelephone' /> </phonenumber> </venuePhone> </location> </xsl:for-each> </locations> </xsl:template> </xsl:stylesheet>
I’m trying to replace the $CurrentCategory variable the appropriate code to display mycategorytext
I don’t have an XSLT editor here, but have you tried using