Mam problemy z szablonem, który musi sprawdzić 3 różnych węzłów, a jeśli nie są one puste, wydrukować danetestowania XSL puste struny z <xsl:if> i sortowania
używam <xsl:if test="string-length(node) != 0">
dla każdego węzła następnie robi wyjście ale nic nie drukuje. To tak, jakby test zwrócił zero.
Wybrałem węzeł nadrzędny każdego węzła Chcę sprawdzić długość jako dopasowanie do szablonu, ale nadal nie działa.
Kolejna rzecz, jak posortować listę przy użyciu <datefrom>
. Próbowałem użyć tego, ale pojawia się błąd podczas ładowania arkusza stylów. Jeśli wykupię sortowanie, które działa:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template name="hoo" match="/">
<html>
<head>
<title>Registered Festival Organisers and Festivals</title>
<link rel="stylesheet" type="text/css" href="userfestival.css" />
</head>
<body>
<h1>Registered Festival Organisers and Festivals</h1>
<h3>Ordered by the festival date ascending</h3>
<xsl:apply-templates select="folktask/member"/>
<xsl:if test="position()=last()">
<div class="count"><h2>Total number of festival organisers: <xsl:value-of select="count(/folktask/member/user/account/userlevel[text()=3])"/></h2></div>
<div class="count"><h2>Total number of festivals: <xsl:value-of select="count(/folktask/member/festival)"/></h2></div>
</xsl:if>
</body>
</html>
</xsl:template>
<xsl:template match="folktask/member">
<xsl:if test="user/account/userlevel='3'">
<xsl:sort select="festival/event/datefrom"/>
<div class="userdiv">
<xsl:apply-templates select="user"/>
<xsl:apply-templates select="festival"/>
</div>
</xsl:if>
</xsl:template>
<xsl:template match="user">
<xsl:apply-templates select="@id" mode="userid"/>
<xsl:apply-templates select="personal/name"/>
<xsl:apply-templates select="personal/address1"/>
<xsl:apply-templates select="personal/city"/>
<xsl:apply-templates select="personal/county"/>
<xsl:apply-templates select="personal/postcode"/>
<xsl:apply-templates select="personal/telephone"/>
<xsl:apply-templates select="personal/mobile"/>
<xsl:apply-templates select="personal/email"/>
<xsl:apply-templates select="personal"/>
<xsl:apply-templates select="account/username"/>
<xsl:apply-templates select="account"/>
</xsl:template>
<xsl:template match="festival">
<xsl:apply-templates select="@id" mode="festid"/>
<xsl:apply-templates select="event/eventname"/>
<xsl:apply-templates select="event/url"/>
<xsl:apply-templates select="event/datefrom"/>
<xsl:apply-templates select="event/dateto"/>
<xsl:apply-templates select="event/location"/>
<xsl:apply-templates select="event/eventpostcode"/>
<xsl:apply-templates select="event/coords/lat"/>
<xsl:apply-templates select="event/coords/lng"/>
<xsl:apply-templates select="contact/conname"/>
<xsl:apply-templates select="contact/conaddress1"/>
<xsl:apply-templates select="contact/conaddress2"/>
<xsl:apply-templates select="contact/concity"/>
<xsl:apply-templates select="contact/concounty"/>
<xsl:apply-templates select="contact/conpostcode"/>
<xsl:apply-templates select="contact"/>
<xsl:apply-templates select="contact/conemail"/>
</xsl:template>
<xsl:template match="@id" mode="userid">
<div class="heading bold"><h2>USER ID: <xsl:value-of select="." /></h2></div>
</xsl:template>
<xsl:template match="personal/name">
<div class="small bold">NAME:</div>
<div class="large"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="personal/address1">
<div class="small bold">ADDRESS:</div>
<div class="large"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="personal/city">
<div class="small bold">CITY:</div>
<div class="large"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="personal/county">
<div class="small bold">COUNTY:</div>
<div class="large"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="personal/postcode">
<div class="small bold">POSTCODE:</div>
<div class="large"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="personal/telephone">
<div class="small bold">TELEPHONE:</div>
<div class="large"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="personal/mobile">
<div class="small bold">MOBILE:</div>
<div class="large"><xsl:value-of select="." />
</div>
</xsl:template>
<xsl:template match="personal/email">
<div class="small bold">EMAIL:</div>
<div class="large">
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:text>mailto:</xsl:text>
<xsl:value-of select="." />
</xsl:attribute>
<xsl:value-of select="." />
</xsl:element>
</div>
</xsl:template>
<xsl:template match="personal">
<div class="small bold">SEX:</div>
<div class="colored bold">
<xsl:choose>
<xsl:when test="sex='Male'">
<div class="sex male"><xsl:value-of select="sex/."/></div>
</xsl:when>
<xsl:otherwise>
<div class="sex female"><xsl:value-of select="sex/."/></div>
</xsl:otherwise>
</xsl:choose>
</div>
</xsl:template>
<xsl:template match="account/username">
<div class="small bold">USERNAME:</div>
<div class="large"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="account">
<div class="small bold">ACCOUNT TYPE:</div>
<div class="colored ">
<xsl:choose>
<xsl:when test="userlevel='1'">
<div class="nml bold">Normal User</div>
</xsl:when>
<xsl:when test="userlevel='2'">
<div class="vol bold">Volunteer</div>
</xsl:when>
<xsl:when test="userlevel='3'">
<div class="org bold">Organiser</div>
</xsl:when>
<xsl:otherwise>
<div class="name adm bold">Administrator</div>
</xsl:otherwise>
</xsl:choose>
</div>
</xsl:template>
<xsl:template match="@id" mode="festid">
<div class="heading2 bold"><h2>FESTIVAL ID: <xsl:value-of select="." /></h2></div>
</xsl:template>
<xsl:template match="eventname">
<div class="small bold">EVENT NAME:</div>
<div class="large bold"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="url">
<div class="small bold">URL:</div>
<div class="large">
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="." />
</xsl:attribute>
<xsl:value-of select="." />
</xsl:element>
</div>
</xsl:template>
<xsl:template match="datefrom">
<div class="small bold">DATE FROM:</div>
<div class="large"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="dateto">
<div class="small bold">DATE TO:</div>
<div class="large"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="location">
<div class="small bold">LOCATION:</div>
<div class="large"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="eventpostcode">
<div class="small bold">POSTCODE:</div>
<div class="large"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="coords/lat">
<div class="small bold">LATITUDE:</div>
<div class="large"><xsl:value-of select="." />
</div>
</xsl:template>
<xsl:template match="coords/lng">
<div class="small bold">LONGITUDE:</div>
<div class="large"><xsl:value-of select="." />
</div>
</xsl:template>
<xsl:template match="conname">
<div class="small bold">NAME:</div>
<div class="large"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="conaddress1">
<div class="small bold">ADDRESS:</div>
<div class="large"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="conaddress2">
<xsl:if test="string-length(conaddress2)!=0">
<div class="small bold"><xsl:text> </xsl:text></div>
<div class="large">
<xsl:value-of select="." />
</div>
</xsl:if>
</xsl:template>
<xsl:template match="concity">
<div class="small bold">CITY:</div>
<div class="large"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="concounty">
<div class="small bold">COUNTY:</div>
<div class="large"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="conpostcode">
<div class="small bold">POSTCODE:</div>
<div class="large"><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="contact">
<xsl:if test="string-length(contelephone)!=0">
<div class="small bold">TELEPHONE:</div>
<div class="large">
<xsl:value-of select="contelephone/." />
</div>
</xsl:if>
<xsl:if test="string-length(conmobile)!=0">
<div class="small bold">MOBILE:</div>
<div class="large">
<xsl:value-of select="conmobile/." />
</div>
</xsl:if>
<xsl:if test="string-length(fax)!=0">
<div class="small bold">FAX:</div>
<div class="large">
<xsl:value-of select="fax/." />
</div>
</xsl:if>
</xsl:template>
<xsl:template match="conemail">
<div class="small bold">EMAIL:</div>
<div class="large">
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:text>mailto:</xsl:text>
<xsl:value-of select="." />
</xsl:attribute>
<xsl:value-of select="." />
</xsl:element>
</div>
</xsl:template>
</xsl:stylesheet>
I część mojego xml. Jeśli potrzebujesz mnie do edycji mojego posta, to zobaczysz pełny kod, ale reszta działa poprawnie.
<folktask>
<member>
<user id="4">
<personal>
<name>Connor Lawson</name>
<sex>Male</sex>
<address1>12 Ash Way</address1>
<address2></address2>
<city>Swindon</city>
<county>Wiltshire</county>
<postcode>SN3 6GS</postcode>
<telephone>01791928119</telephone>
<mobile>07338695664</mobile>
<email>[email protected]</email>
</personal>
<account>
<username>iTuneStinker</username>
<password>3a1f5fda21a07bfff20c41272bae7192</password>
<userlevel>3</userlevel>
<signupdate>2010-03-26T09:23:50</signupdate>
</account>
</user>
<festival id="1">
<event>
<eventname>Oxford Folk Festival</eventname>
<url>http://www.oxfordfolkfestival.com/</url>
<datefrom>2010-04-07</datefrom>
<dateto>2010-04-09</dateto>
<location>Oxford</location>
<eventpostcode>OX1 9BE</eventpostcode>
<coords>
<lat>51.735640</lat>
<lng>-1.276136</lng>
</coords>
</event>
<contact>
<conname>Stuart Vincent</conname>
<conaddress1>P.O. Box 642</conaddress1>
<conaddress2></conaddress2>
<concity>Oxford</concity>
<concounty>Bedfordshire</concounty>
<conpostcode>OX1 3BY</conpostcode>
<contelephone>01865 79073</contelephone>
<conmobile></conmobile>
<fax></fax>
<conemail>[email protected]</conemail>
</contact>
</festival>
</member>
</folktask>
Nie umieszczono kod XSLT z głównym problemem. Co do '', może to być tylko dziecko (natychmiast!) Z '' lub ''. –
Edytowany post, aby wyświetlić cały kod arkusza stylów XSL – AdRock