homepage Welcome to WebmasterWorld Guest from 54.166.66.204
register, free tools, login, search, pro membership, help, library, announcements, recent posts, open posts,
Become a Pro Member
Home / Forums Index / Code, Content, and Presentation / XML Development
Forum Library, Charter, Moderators: httpwebwitch

XML Development Forum

    
Variable inside a Variable
A problem with xsl variables
iwebcreate




msg:3812280
 2:21 pm on Dec 21, 2008 (gmt 0)

Hi all,

I have been trying to get this working for hours and days now and need a fresh pair of eyes to tell me what I'm doing wrong. I hope someone out there can help. Thanks you so much in advance if you able to help :)

BACKGROUND INFO

I have the following two xml files that are combined together into one xml file and then transformed using server side XSLT, PHP and the MODx content management system.

WHAT I AM TRYING TO DO

From a long list of hotels in the xml file (hotellist.xml - please see below), I am trying to call ONE hotel in particular with the ID of '1234567' and get it's 'hotelurl' value and place this into a link using XSLT.

THE PROBLEM

The problem I am having with the XSL below is with the 'ThisHotelID' variable and 'HotelURL' variable. I don't get an error but I can't seem to be able to get the value of the 'ThisHotelID' variable into the variable of 'HotelURL' - it seems to just ignore it and parse the variable as if it's empty?!

MY QUESTIONS

What am I doing wrong here?
Are you not able to put a variable within another variable?
What is the best way to do this?

------------------------------------------------- CODE -------------------------------------------------

[b]XML 1[/b] (hotelinfo.xml)

<Hotel>
<HotelID>1234567</HotelID>
<HotelName>Hotel Name Here</HotelName>
<HotelAddress>Hotel Address Here</HotelAddress>
<City>City Name</City>
<Country>Country Name</Country>
<StarRating>5</StarRating>
<!-- There is lots more information in this xml file omitted here to save space -->
</Hotel>

[b]XML 2[/b] (hotellist.xml)

<hotels>

<hotel id="1234567">
<hotelname>Hotel Name Here</hotelname>
<hotelurl>[b][i]/link/to/hotel/url/on/server.php[/i][/b]</hotelurl>
<latitude>18.76624</latitude>
<longitude>98.99526</longitude>
</hotel>
<hotel id="7654321">
<hotelname>Hotel Name Here</hotelname>
<hotelurl>/link/to/hotel/url/on/server.php</hotelurl>
<latitude>18.76624</latitude>
<longitude>98.99526</longitude>
</hotel>
<!-- There are lots more hotels in this xml file omitted here to save space -->

</hotels>

[b]COMBINED XML FILE[/b] (combined.xml)

<hoteldetails>
<file href="http://www.mydomain.org/hotels/hotelinfo.xml"/>
<file href="http://www.mydomain.org/hotels/hotellist.xml"/>
</hoteldetails>

[b]XSL FILE[/b] (hotel.xsl)

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>

<xsl:template match="hoteldetails">

<h1><xsl:value-of select="document(file/@href)/Hotel/HotelName"/></h1>
<p><xsl:value-of select="document(file/@href)/Hotel/Address"/></p>

<xsl:variable name="[b][i]ThisHotelID[/i][/b]"><xsl:value-of select="document(file/@href)/Hotel/HotelID" /></xsl:variable>
<xsl:variable name="[b][i]HotelURL[/i][/b]"><xsl:value-of select="document(file/@href)/hotels/hotel[@id='[b][i]{$ThisHotelID}[/i][/b]']/hotelurl" /></xsl:variable>

<p>
<a href="http://www.mydomain.org[b][i]{$HotelURL}[/i][/b]" title="Click to view the {document(file/@href)/Hotel/HotelName}" target="_top">
<img src="http://www.mydomain.org/hotels/images/image.jpg" alt="{document(file/@href)/Hotel/HotelName}" />
</a>
</p>
<!-- There are a lot more hotels and hotels info in this xml file omitted here to save space -->

</xsl:template>
</xsl:stylesheet>

[edited by: eelixduppy at 5:49 pm (utc) on Dec. 24, 2008]
[edit reason] disabled smileys [/edit]

 

iwebcreate




msg:3812792
 3:40 pm on Dec 22, 2008 (gmt 0)

Hi all,

Below is the same XSL code as that in my previous post below but not using two variables but just one - but I still can't get this working - there's no error - it just doesn't include the url:

------------------------------- CODE -------------------------------

XSL FILE (hotel.xsl)

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>

<xsl:template match="hoteldetails">

<h1><xsl:value-of select="document(file/@href)/Hotel/HotelName"/></h1>
<p><xsl:value-of select="document(file/@href)/Hotel/Address"/></p>

<xsl:variable name="ThisHotelID"><xsl:value-of select="document(file/@href)/Hotel/HotelID" /></xsl:variable>

<p>
<a href="http://www.mydomain.org{document(file/@href)/hotels/hotel[@id='{$ThisHotelID}']/hotelurl}" title="Click to view the {document(file/@href)/Hotel/HotelName}" target="_top">
<img src="http://www.mydomain.org/hotels/images/image.jpg" alt="{document(file/@href)/Hotel/HotelName}" />
</a>
</p>
<!-- There are a lot more hotels and hotels info in this xml file omitted here to save space -->

</xsl:template>
</xsl:stylesheet>

[edited by: eelixduppy at 7:22 pm (utc) on Dec. 23, 2008]
[edit reason] disabled smileys [/edit]

iwebcreate




msg:3813847
 8:03 am on Dec 24, 2008 (gmt 0)

Hi all, just to let you know, if this may help anyone? I have got this working now with the following code.

Merry Christmas & A Happy New Year 2009 to all.

XSL FILE (hotel.xsl)

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>

<xsl:template match="hoteldetails">

<h1><xsl:value-of select="document(file/@href)/Hotel/HotelName"/></h1>
<p><xsl:value-of select="document(file/@href)/Hotel/Address"/></p>

<xsl:variable name="ThisHotelID" select="document(file/@href)/Hotel/HotelID" />
<xsl:variable name="HotelURL" select="document(file/@href)/hotels/hotel[@id=$ThisHotelID]/hotelurl" />

<p>
<a href="http://www.mydomain.org{$HotelURL}" title="Click to view the {document(file/@href)/Hotel/HotelName}" target="_top">
<img src="http://www.mydomain.org/hotels/images/image.jpg" alt="{document(file/@href)/Hotel/HotelName}" />
</a>
</p>
<!-- There are a lot more hotels and hotels info in this xml file omitted here to save space -->

</xsl:template>
</xsl:stylesheet>

[edited by: eelixduppy at 5:49 pm (utc) on Dec. 24, 2008]
[edit reason] disabled smileys [/edit]

eelixduppy




msg:3814031
 5:50 pm on Dec 24, 2008 (gmt 0)

Cool, thanks for sharing.

Welcome to WebmasterWorld and have a great holiday yourself! :)

Global Options:
 top home search open messages active posts  
 

Home / Forums Index / Code, Content, and Presentation / XML Development
rss feed

All trademarks and copyrights held by respective owners. Member comments are owned by the poster.
Home ¦ Free Tools ¦ Terms of Service ¦ Privacy Policy ¦ Report Problem ¦ About ¦ Library ¦ Newsletter
WebmasterWorld is a Developer Shed Community owned by Jim Boykin.
© Webmaster World 1996-2014 all rights reserved