2011-08-07 3 views
1

xslt에서 조건을 수정하는 데 도움이 필요합니다.xslt에 조건 추가

나는 나의 현재 XSL은 subcategory을 찾고 category에 대한 보이지 않는

<xsl:param name="today" select="'19470815'" /> <!-- this is date in yyyyMMdd format -->  
<xsl:param name="categoryID"/> <!-- This is CATEGORYID in xml file --> 
<xsl:param name="subCategoryID"/> <!-- This is SUBCATEGORYID in xml file --> 

내 XSL 3 PARAM 있습니다.

내 요구 사항은 다음과 같습니다 값 0로 전달됩니다

  • categoryID 경우 categoryID 후 전달됩니다
  • 경우 모든 범주가 ​​subcategoryID0 경우 결과는 해당 카테고리의 ID 만
  • 을 표시한다 결과 목록 아래 표시된 결과 하위 범주 categoryID
  • subcategoryID이 전달 된 경우, categoryIDsubcategoryID0 후 더 지난 날짜 결과 표시 안되도록 today 파라미터가 전달되는 모든 결과

표시된다

  • 경우 t 선택된 하위에 해당되는 특정 서브 카테고리의 값을 표시한다.

    이 xslt 수정에 안내해주세요. 내 XML 및 XSLT는 이하

    <xsl:choose> 
        <xsl:when test="$type = 'open' "> 
    
         <xsl:for-each select="//SUMMARYNODE[SUMMARY/SUBCATEGORYID = $subCategoryID and SUMMARY/FORMATTEDDATE >= $today] "> 
          <xsl:sort select="SUMMARY/FORMATTEDDATE " /> 
          SOME STUFF 
         </xsl:for-each> 
         <xsl:if test="count(//SUMMARYNODE[SUMMARY/SUBCATEGORYID = $subCategoryID and SUMMARY/FORMATTEDDATE >= $today]) >= 1 "> 
          SOME MORE STUFF 
         </xsl:if> 
         <xsl:if test="not (count(//SUMMARYNODE[SUMMARY/SUBCATEGORYID = $subCategoryID and SUMMARY/FORMATTEDDATE >= $today])>=1) "> 
          NO RECORDS AVAILABLE 
         </xsl:if> 
    
        </xsl:when> 
    
    </xsl:choose> 
    

    XML 입력

    <root> 
    
        <SUMMARYNODE> 
         <SUMMARY>   
          <CATEGORY CATEGORYID="2">OPERATIONS PROCUREMENT</CATEGORY> 
          <SUBCATEGORYID>4</SUBCATEGORYID>    
         </SUMMARY> 
    
        </SUMMARYNODE> 
    
    
        <SUMMARYNODE> 
         <SUMMARY>   
          <CATEGORY CATEGORYID="2">XYZ</CATEGORY> 
          <SUBCATEGORYID>6</SUBCATEGORYID>    
         </SUMMARY> 
    
        </SUMMARYNODE> 
    
        <SUMMARYNODE> 
         <SUMMARY>   
          <CATEGORY CATEGORYID="5">ABC</CATEGORY> 
          <SUBCATEGORYID>8</SUBCATEGORYID>    
         </SUMMARY> 
    
        </SUMMARYNODE> 
    
    </root> 
    
  • +0

    질문은 어디에 있습니까? –

    +0

    질문을 더 명확하게하기 위해 원하는 결과물을 보여주십시오. –

    답변

    1

    나는 XSL을 사용하는 것이 더 낫다,

    <xsl:for-each select="//SUMMARYNODE 
        [SUMMARY/CATEGORY/@CATEGORYID = $categoryID or $categoryID = '0'] 
        [SUMMARY/SUBCATEGORYID = $subCategoryID or $subCategoryID = '0'] 
        [SUMMARY/FORMATTEDDATE >= $today]"> 
    

    실제로 다음과 같이 원하는 조건이라고 생각 : apply-templates xsl : for-each 대신에을 적용하십시오. 이 인스턴스에서는 ** xsl : sort을 사용할 수 있습니다.

    여기에 전체 XSLT

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
        <xsl:output method="xml" indent="yes"/> 
    
        <xsl:param name="today" select="'19470815'"/> 
        <xsl:param name="categoryID" select="0"/> 
        <xsl:param name="subCategoryID" select="0"/> 
    
        <xsl:template match="/root"> 
         <xsl:apply-templates select="SUMMARYNODE 
         [SUMMARY/CATEGORY/@CATEGORYID = $categoryID or $categoryID = '0'] 
         [SUMMARY/SUBCATEGORYID = $subCategoryID or $subCategoryID = '0'] 
         [SUMMARY/FORMATTEDDATE >= $today]"> 
         <xsl:sort select="SUMMARY/FORMATTEDDATE "/> 
         </xsl:apply-templates> 
    
         <xsl:variable name="recordCount" select="count(SUMMARYNODE   
         [SUMMARY/CATEGORY/@CATEGORYID = $categoryID or $categoryID = '0'] 
         [SUMMARY/SUBCATEGORYID = $subCategoryID or $subCategoryID = '0'] 
         [SUMMARY/FORMATTEDDATE >= $today])"/> 
         <xsl:if test="$recordCount > 1"> SOME MORE STUFF </xsl:if> 
         <xsl:if test="$recordCount = 0"> NO RECORDS AVAILABLE </xsl:if> 
        </xsl:template> 
    
        <xsl:template match="SUMMARYNODE"> 
        SOME STUFF 
        </xsl:template> 
    </xsl:stylesheet> 
    

    참고 두 번 같은 계산을 피하기 위해 변수의 사용을합니다.