0
votes

So in the last template that matches "AttributeList", I need to display the content from it, split by delimiter ",". Unfortunately everything I tried doesn't work; tokenizing, string functions, ... Since im on version 1.0. separator doesn't work. I need help!

XML: `

<Name>Hotel Lemax</Name>
<NumberOfStars>5</NumberOfStars>

<PhotoList>
    <Photo>
        <Url>http://demotest.itravelsoftware.com/fotografije_itravel/7/717_636077307841478526.jpg</Url>
    </Photo>
    <Photo>
        <Url>http://demotest.itravelsoftware.com/fotografije_itravel/7/715_636077306767263022.jpg</Url>
    </Photo>
    <Photo>
        <Url>http://demotest.itravelsoftware.com/fotografije_itravel/7/714_636077303419440444.jpg</Url>
    </Photo>
    <Photo>
        <Url>http://demotest.itravelsoftware.com/fotografije_itravel/7/539_636064349608545756.jpg</Url>
    </Photo>
</PhotoList>

<RoomList>
    <Room>
        <Name>Double room</Name>
        <Price>100 EUR</Price>
        <AttributeList>
            <Attribute>
                <Name>Deluxe</Name>
            </Attribute>
            <Attribute>
                <Name>Half board</Name>
            </Attribute>
        </AttributeList>
    </Room>
    <Room>
        <Name>Triple room</Name>
        <Price>200 EUR</Price>
        <AttributeList>
            <Attribute>
                <Name>Deluxe</Name>
            </Attribute>
            <Attribute>
                <Name>Full board</Name>
            </Attribute>
            <Attribute>
                <Name>Jacuzzi</Name>
            </Attribute>
        </AttributeList>
    </Room>
</RoomList>

`

XSLT:

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

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

<xsl:template match="/">

    <html>
        <head>
            <title>
                <xsl:value-of select="Hotel/Name"/>
            </title>
        </head>
        <body>
            <h1>
                <xsl:value-of select="Hotel/Name"/>
            </h1>

            <h2> Number of stars:
                <xsl:value-of select="Hotel/NumberOfStars"/>
            </h2>

            <div>
                First photo: <br/>
                <xsl:apply-templates select="//Photo[1]"/>
            </div>

            <div>
                Other photos: <br/>
                <xsl:call-template name="Lista"/>
                <xsl:call-template name="Lista"/>
                <xsl:call-template name="Lista"/>
            </div>

            <div>
            Rooms:
            <br/><br/>
            <xsl:apply-templates select="//Room"/>
            </div>
        </body>
    </html>

</xsl:template>



<xsl:template match="//Photo">
    <img src="{.}" style="width: 100px; height: 100px;"></img>
</xsl:template>

<xsl:template name="Lista">
    <xsl:value-of select="/PhotoList"/>
        <img src="{.}" style="width: 100px; height: 100px; padding: 0 20px;"></img>
</xsl:template>



<xsl:template match="//Room">  
    <xsl:apply-templates select="Name"/>
    <xsl:apply-templates select="Price"/>
    <xsl:apply-templates select="AttributeList"/>
</xsl:template> 

<xsl:template match="Name"> 
    <b>Name:</b> <b><xsl:value-of select="."/></b>  <br/><br/>
</xsl:template>

<xsl:template match="Price">
    Price:<xsl:value-of select="."/> 
    <br/> 
</xsl:template>

<xsl:template match="AttributeList">
Attributes:
    <xsl:for-each select=".">
        <xsl:value-of select="."/> 
            
    </xsl:for-each>
    <br/><br/> 
</xsl:template>

</xsl:stylesheet>

The output is:

Attributes: Deluxe Half board ... Attributes: Deluxe Full board Jacuzzi

The output I want is:

Attributes: Deluxe, Half board ... Attributes: Deluxe, Full board, Jacuzzi

1

1 Answers

0
votes

Try changing this:

<xsl:template match="AttributeList">
Attributes:
    <xsl:for-each select=".">
        <xsl:value-of select="."/> 
            
    </xsl:for-each>
    <br/><br/> 
</xsl:template>

to:

<xsl:template match="AttributeList">
Attributes:
    <xsl:for-each select="Attribute">
        <xsl:value-of select="Name"/> 
        <xsl:if test="position()!=last()">, </xsl:if>
    </xsl:for-each>
    <br/><br/> 
</xsl:template>