2010-04-22 6 views
4

param에 값이 있는지 확인해야합니다. 그렇다면이 행을 수행하고 그렇지 않으면이 행을 수행하십시오.XSL param length를 선택하고 선택하십시오.

나는 내가 에러가 발생하지 않는 반면, 작업 주 잖아하지만

volunteer_role 템플릿

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:key name="volunteers-by-region" match="volunteer" use="region" /> 
    <xsl:template name="hoo" match="/"> 
    <html> 
     <head> 
     <title>Registered Volunteers</title> 
     <link rel="stylesheet" type="text/css" href="volunteer.css" /> 
     </head> 
     <body> 
     <h1>Registered Volunteers</h1> 
     <h3>Ordered by the username ascending</h3> 
     <xsl:for-each select="folktask/member[user/account/userlevel='2']"> 
      <xsl:for-each select="volunteer[count(. | key('volunteers-by-region', region)[1]) = 1]"> 
      <xsl:sort select="region" /> 
      <xsl:for-each select="key('volunteers-by-region', region)"> 
       <xsl:sort select="folktask/member/user/personal/name" /> 
       <div class="userdiv"> 
        <xsl:call-template name="volunteer_volid"> 
        <xsl:with-param name="volid" select="../volunteer/@id" /> 
        </xsl:call-template> 
        <xsl:call-template name="volunteer_role"> 
        <xsl:with-param name="volrole" select="../volunteer/roles" /> 
        </xsl:call-template> 
        <xsl:call-template name="volunteer_region"> 
        <xsl:with-param name="volloc" select="../volunteer/region" /> 
        </xsl:call-template> 
       </div> 
       </xsl:for-each> 
      </xsl:for-each> 
      </xsl:for-each> 
      <xsl:if test="position()=last()"> 
      <div class="count"> 
       <h2>Total number of volunteers: <xsl:value-of select="count(/folktask/member/user/account/userlevel[text()=2])" /> 
       </h2> 
      </div> 
      </xsl:if> 
     </body> 
     </html> 
    </xsl:template> 

    <xsl:template name="volunteer_volid"> 
     <xsl:param name="volid" select="'Not Available'" /> 
     <div class="heading2 bold"><h2>VOLUNTEER ID: <xsl:value-of select="$volid" /></h2></div> 
    </xsl:template> 

    <xsl:template name="volunteer_role"> 
     <xsl:param name="volrole" select="'Not Available'" /> 
     <div class="small bold">ROLES:</div> 
     <div class="large"> 
     <xsl:choose> 
     <xsl:when test="string-length($volrole)!=0"> 
      <xsl:value-of select="$volrole" /> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:text> </xsl:text> 
     </xsl:otherwise> 
     </xsl:choose> 
    </div> 
    </xsl:template> 

    <xsl:template name="volunteer_region"> 
    <xsl:param name="volloc" select="'Not Available'" /> 
    <div class="small bold">REGION:</div> 
    <div class="large"><xsl:value-of select="$volloc" /></div> 
    </xsl:template> 
</xsl:stylesheet> 

그리고 XML의 잘못된 지점입니다 권리 분기를 복용 아니에요 :

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<?xml-stylesheet type="text/xsl" href="volunteers.xsl"?> 
<folktask xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="folktask.xsd"> 
    <member> 
    <user id="1"> 
     <personal> 
     <name>Abbie Hunt</name> 
     <sex>Female</sex> 
     <address1>108 Access Road</address1> 
     <address2></address2> 
     <city>Wells</city> 
     <county>Somerset</county> 
     <postcode>BA5 8GH</postcode> 
     <telephone>01528927616</telephone> 
     <mobile>07085252492</mobile> 
     <email>[email protected]</email> 
     </personal> 
     <account> 
     <username>AdRock</username> 
     <password>269eb625e2f0cf6fae9a29434c12a89f</password> 
     <userlevel>4</userlevel> 
     <signupdate>2010-03-26T09:23:50</signupdate> 
     </account> 
    </user> 
    <volunteer id="1"> 
     <roles></roles> 
     <region>South West</region> 
    </volunteer> 
    </member> 
    <member> 
    <user id="2"> 
     <personal> 
     <name>Aidan Harris</name> 
     <sex>Male</sex> 
     <address1>103 Aiken Street</address1> 
     <address2></address2> 
     <city>Chichester</city> 
     <county>Sussex</county> 
     <postcode>PO19 4DS</postcode> 
     <telephone>01905149894</telephone> 
     <mobile>07784467941</mobile> 
     <email>[email protected]</email> 
     </personal> 
     <account> 
     <username>AmbientExpert</username> 
     <password>8e64214160e9dd14ae2a6d9f700004a6</password> 
     <userlevel>2</userlevel> 
     <signupdate>2010-03-26T09:23:50</signupdate> 
     </account> 
    </user> 
    <volunteer id="2"> 
     <roles>Van Driver,gas Fitter</roles> 
     <region>South Central</region> 
    </volunteer> 
    </member> 
</folktask> 
+0

당신의/선택합니다. 당신의 의견은 무엇입니까? 과 같은 것을 삽입하고 출력을 살펴봄으로써 항상 테스트 할 수 있습니다. – topskip

+0

어디서들을 수 있습니까? param 이름 바로 뒤에 넣거나 "when stylesheet : XSLT stylesheet를 구문 분석하는 데 실패했습니다."라는 오류 메시지가 표시됩니다. – AdRock

+0

저는 param 바로 뒤에 (div 앞에) 넣었습니다. XSLT 1.0을 사용하고 있습니까? XSLT 2.0을 사용해 보았습니다. – topskip

답변

5

다음은 트릭을해야 다음

<xsl:template name="volunteer_volid"> 
    <xsl:param name="volid" /> 
    <xsl:choose> 
    <xsl:when test="string-length($volid) > 0"> 
     <div class="heading2 bold"><h2>VOLUNTEER ID: <xsl:value-of select="$volid" /></h2></div> 
    </xsl:when> 
    <xsl:otherwise> 
     <!-- No volid --> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

저는 매개 변수 값을 제공하지 않는 것이 ""로 매개 변수 값을 제공하는 것과 같기 때문에 기본값을 빈 문자열로 바꿨습니다. 이 원하는 동작이 아닌 경우, 예를 들어, 다음 매개 변수 select을 변경하고 그에 따라 test 표현을 수정/그렇지 않으면 나에게 올바른 보이는 경우

$volid != 'Not Available'