Вызов шаблона XML - PullRequest
       20

Вызов шаблона XML

1 голос
/ 29 июля 2011

Это мой формат XML

<Formsxml CM="7" CW="3">
      <Forms GroupName="Kingfisher" PRONME="Kingfisher" TBONUSP="6000" NACRES="45" TP="133.333333">
        <Form M="1" GroupName="Kingfisher January" PRONME="Kingfisher" TBONUSP="1000" NACRES="7.50" TP="133.333333" />
        <Form M="2" GroupName="Kingfisher Feb" PRONME="Kingfisher" TBONUSP="1000" NACRES="7.50" TP="133.333333" />
        <Form M="5" GroupName="Kingfisher May" PRONME="Kingfisher" TBONUSP="1000" NACRES="7.50" TP="133.333333" />
        <Form M="6" GroupName="Kingfisher July" TBONUSP="1000" NACRES="7.50" TP="133.333333" />
        <Form W="3" GroupName="Kingfisher Week 3 Total" TBONUSP="2000" NACRES="7.50" TP="133.333333" />
      </Forms>
      <Forms GroupName="Pigeon" PRONME="Pigeon" TBONUSP="5000" NACRES="55555.00" TP="0.018000">
        <Form M="5" GroupName="Pigeon May" PRONME="Pigeon" TBONUSP="1000" NACRES="7.50" TP="133.333333" />
        <Form M="6" GroupName="Pigeon July" TBONUSP="1000" NACRES="7.50" TP="133.333333" />
        <Form W="1" GroupName="Pigeon Week 1 Total" TBONUSP="2000" NACRES="7.50" TP="133.333333" />
      </Forms>
      <Forms GroupName="Sparrow" PRONME="Sparrow" TBONUSP="1000" NACRES="0.90" TP="1111.111111">
        <Form M="6" GroupName="Sparrow July" TBONUSP="1000" NACRES="7.50" TP="133.333333" />
        <Form W="4" GroupName="Sparrow July" TBONUSP="1000" NACRES="7.50" TP="133.333333" />
      </Forms>
     </Formsxml>

Это мой XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
      <table cellspacing="0" cellpadding="0" width="100%" border="1" borderColorDark="#ffffff" borderColorLight="#000000" class="smlFonts">
          <tr height="20" align="center">
          <td rowspan="1" width="10%"><b>Name</b></td>
          <td rowspan="1" width="7%"><b>Net</b></td>
          <td rowspan="1" width="7%"><b>Total</b></td>
          <td rowspan="1" width="8%"><b>Average</b></td>
        <xsl:apply-templates select="*/Forms"/>
        </tr>
            </table>

  </xsl:template>
       <xsl:template match="Forms">
    <xsl:apply-templates select="Form"/>
      <tr style="color:red">
      <td>
        <xsl:value-of select="@NAME"/> Total
      </td>
      <td>
        <xsl:value-of select="@NACRES"/>
      </td>
      <td>
        <xsl:value-of select="@TBONUSP"/>
      </td>
      <td>
        <xsl:value-of select="@TP"/>
      </td>
    </tr>
  </xsl:template>


  <xsl:template match="Form">
            <xsl:choose>
            <xsl:when test="@M ='1'">
            <tr>
        <td>
                <xsl:value-of select="@GroupName"/>
            </td>
        <td>
                <xsl:value-of select="@NACRES"/>
        </td>
        <td>
                <xsl:value-of select="@TBONUSP"/>
        </td>
        <td>
                <xsl:value-of select="@TP"/>
        </td>
      </tr>
          </xsl:when>

            <xsl:otherwise><tr>
        <td>
                January
            </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
      </tr></xsl:otherwise>
            </xsl:choose>
            <xsl:choose>
            <xsl:when test="@M ='2'">
            <tr>
        <td>
                <xsl:value-of select="@GroupName"/>
            </td>
        <td>
                <xsl:value-of select="@NACRES"/>
        </td>
        <td>
                <xsl:value-of select="@TBONUSP"/>
        </td>
        <td>
                <xsl:value-of select="@TP"/>
        </td>
      </tr>
          </xsl:when>

            <xsl:otherwise><tr>
        <td>
                Febuary
            </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
      </tr></xsl:otherwise>
            </xsl:choose>
            <xsl:choose>
            <xsl:when test="@M ='3'">
            <tr>
        <td>
                <xsl:value-of select="@GroupName"/>
            </td>
        <td>
                <xsl:value-of select="@NACRES"/>
        </td>
        <td>
                <xsl:value-of select="@TBONUSP"/>
        </td>
        <td>
                <xsl:value-of select="@TP"/>
        </td>
      </tr>
          </xsl:when>

            <xsl:otherwise><tr>
        <td>
                March
            </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
      </tr></xsl:otherwise>
            </xsl:choose>
            <xsl:choose>
            <xsl:when test="@M ='4'">
            <tr>
        <td>
                <xsl:value-of select="@GroupName"/>
            </td>
        <td>
                <xsl:value-of select="@NACRES"/>
        </td>
        <td>
                <xsl:value-of select="@TBONUSP"/>
        </td>
        <td>
                <xsl:value-of select="@TP"/>
        </td>
      </tr>
          </xsl:when>

            <xsl:otherwise><tr>
        <td>
                April
            </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
      </tr></xsl:otherwise>
            </xsl:choose>
            <xsl:choose>
            <xsl:when test="@M ='5'">
            <tr>
        <td>
                <xsl:value-of select="@GroupName"/>
            </td>
        <td>
                <xsl:value-of select="@NACRES"/>
        </td>
        <td>
                <xsl:value-of select="@TBONUSP"/>
        </td>
        <td>
                <xsl:value-of select="@TP"/>
        </td>
      </tr>
          </xsl:when>

            <xsl:otherwise><tr>
        <td>
                May
            </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
      </tr></xsl:otherwise>
            </xsl:choose>
            <xsl:choose>
            <xsl:when test="@M ='6'">
            <tr>
        <td>
                <xsl:value-of select="@GroupName"/>
            </td>
        <td>
                <xsl:value-of select="@NACRES"/>
        </td>
        <td>
                <xsl:value-of select="@TBONUSP"/>
        </td>
        <td>
                <xsl:value-of select="@TP"/>
        </td>
      </tr>
          </xsl:when>

            <xsl:otherwise><tr>
        <td>
                June
            </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
      </tr></xsl:otherwise>
            </xsl:choose>
            <xsl:choose>
            <xsl:when test="@M ='7'">
            <tr>
        <td>
                <xsl:value-of select="@GroupName"/>
            </td>
        <td>
                <xsl:value-of select="@NACRES"/>
        </td>
        <td>
                <xsl:value-of select="@TBONUSP"/>
        </td>
        <td>
                <xsl:value-of select="@TP"/>
        </td>
      </tr>
          </xsl:when>

            <xsl:otherwise><tr>
        <td>
                July
            </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
      </tr></xsl:otherwise>
            </xsl:choose>
            <xsl:choose>
            <xsl:when test="@M ='8'">
            <tr>
        <td>
                <xsl:value-of select="@GroupName"/>
            </td>
        <td>
                <xsl:value-of select="@NACRES"/>
        </td>
        <td>
                <xsl:value-of select="@TBONUSP"/>
        </td>
        <td>
                <xsl:value-of select="@TP"/>
        </td>
      </tr>
          </xsl:when>

            <xsl:otherwise><tr>
        <td>
                August
            </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
      </tr></xsl:otherwise>
            </xsl:choose>
            <xsl:choose>
            <xsl:when test="@M ='9'">
            <tr>
        <td>
                <xsl:value-of select="@GroupName"/>
            </td>
        <td>
                <xsl:value-of select="@NACRES"/>
        </td>
        <td>
                <xsl:value-of select="@TBONUSP"/>
        </td>
        <td>
                <xsl:value-of select="@TP"/>
        </td>
      </tr>
          </xsl:when>

            <xsl:otherwise><tr>
        <td>
                September
            </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
      </tr></xsl:otherwise>
            </xsl:choose>
            <xsl:choose>
            <xsl:when test="@M ='10'">
            <tr>
        <td>
                <xsl:value-of select="@GroupName"/>
            </td>
        <td>
                <xsl:value-of select="@NACRES"/>
        </td>
        <td>
                <xsl:value-of select="@TBONUSP"/>
        </td>
        <td>
                <xsl:value-of select="@TP"/>
        </td>
      </tr>
          </xsl:when>

            <xsl:otherwise><tr>
        <td>
                October
            </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
      </tr></xsl:otherwise>
            </xsl:choose>
            <xsl:choose>
            <xsl:when test="@M ='11'">
            <tr>
        <td>
                <xsl:value-of select="@GroupName"/>
            </td>
        <td>
                <xsl:value-of select="@NACRES"/>
        </td>
        <td>
                <xsl:value-of select="@TBONUSP"/>
        </td>
        <td>
                <xsl:value-of select="@TP"/>
        </td>
      </tr>
          </xsl:when>

            <xsl:otherwise><tr>
        <td>
                November
            </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
      </tr></xsl:otherwise>
            </xsl:choose>
            <xsl:choose>
            <xsl:when test="@M ='12'">
            <tr>
        <td>
                <xsl:value-of select="@GroupName"/>
            </td>
        <td>
                <xsl:value-of select="@NACRES"/>
        </td>
        <td>
                <xsl:value-of select="@TBONUSP"/>
        </td>
        <td>
                <xsl:value-of select="@TP"/>
        </td>
      </tr>
          </xsl:when>

            <xsl:otherwise><tr>
        <td>
                December
            </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
        <td>
                0.0000
        </td>
      </tr></xsl:otherwise>
            </xsl:choose>

  </xsl:template>





</xsl:stylesheet>

Но я хочу вывод, как этот ... Основанный на условии CM означает, что если его 7 только до июня Затем после Основано на неделе CW, если его 3 до 3-й недели я хочу напечатать Любая помощь будет Оценено ........ См. Изображение для более подробной информации ..

Вывод я ожидаю ...

enter image description here

Ответы [ 3 ]

1 голос
/ 01 августа 2011
<xsl:stylesheet version="1.0" 
    xmlns:empo="http://www.w3.org/1999/XSL/Transform/empo"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <empo:months>
        <empo:M id="1">Jan</empo:M>
        <empo:M id="2">Feb</empo:M>
        <empo:M id="3">Mar</empo:M>
        <empo:M id="4">Apr</empo:M>
        <empo:M id="5">May</empo:M>
        <empo:M id="6">Jun</empo:M>
        <empo:M id="7">Jul</empo:M>
        <empo:M id="8">August</empo:M>
        <empo:M id="9">September</empo:M>
        <empo:M id="10">October</empo:M>
        <empo:M id="11">November</empo:M>
        <empo:M id="12">December</empo:M>
    </empo:months>
    <empo:Weeks>
        <empo:M id="1">Week 1</empo:M>
        <empo:M id="2">Week 2</empo:M>
        <empo:M id="3">Week 3</empo:M>
        <empo:M id="4">Week 4</empo:M>
        <empo:M id="5">Week 5</empo:M>

      </empo:Weeks>

    <xsl:template match="/">
        <table cellspacing="0" cellpadding="0" width="100%" border="1" borderColorDark="#ffffff" borderColorLight="#000000" class="smlFonts">
            <tr height="20" align="center">
                <td rowspan="1" width="10%"><b>Name</b></td>
                <td rowspan="1" width="7%"><b>Net</b></td>
                <td rowspan="1" width="7%"><b>Total</b></td>
                <td rowspan="1" width="8%"><b>Average</b></td>
                <xsl:apply-templates select="*/Forms"/>
            </tr>
        </table>

    </xsl:template>
    <xsl:template match="Forms">
        <xsl:variable name="Forms" select="."/>

        <xsl:for-each select="document('')/*/
            empo:months/empo:M[@id &lt; $Forms/../@CM]">
            <xsl:choose>
                <xsl:when test="$Forms/Form[@M=current()/@id]">
                    <xsl:apply-templates   select="$Forms/Form[@M=current()/@id]"/>
                </xsl:when>
                <xsl:otherwise>
                    <tr>
                        <td>
                            <xsl:value-of select="."/>
                        </td>
                        <td>
                            0.0000
                        </td>
                        <td>
                            0.0000
                        </td>
                        <td>
                            0.0000
                        </td>
                    </tr>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:for-each>
         <xsl:for-each select="document('')/*/
            empo:Weeks/empo:M[@id &lt;= $Forms/../@CW]">
            <xsl:choose>
                <xsl:when test="$Forms/Form[@W=current()/@id]">
                    <xsl:apply-templates   select="$Forms/Form[@W=current()/@id]"/>
                </xsl:when>
                <xsl:otherwise>
                    <tr>
                        <td>
                            <xsl:value-of select="."/>
                        </td>
                        <td>
                            0.0000
                        </td>
                        <td>
                            0.0000
                        </td>
                        <td>
                            0.0000
                        </td>
                    </tr>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:for-each>

        <tr style="color:red">
            <td>
                <xsl:value-of select="@NAME"/>
                <xsl:text> Total</xsl:text>
            </td>
            <td>
                <xsl:value-of select="@NACRES"/>
            </td>
            <td>
                <xsl:value-of select="@TBONUSP"/>
            </td>
            <td>
                <xsl:value-of select="@TP"/>
            </td>
        </tr>
    </xsl:template>

    <xsl:template match="Form">
        <tr>
            <td>
                <xsl:value-of select="@GroupName"/>
            </td>
            <td>
                <xsl:value-of select="@NACRES"/>
            </td>
            <td>
                <xsl:value-of select="@TBONUSP"/>
            </td>
            <td>
                <xsl:value-of select="@TP"/>
            </td>
        </tr>
    </xsl:template>

</xsl:stylesheet>
1 голос
/ 30 июля 2011

Боюсь, ваши усилия по выполнению двенадцати xsl:choose инструкций совершенно напрасны и логически неверны.

Вы можете получить желаемый результат с меньшими усилиями, но вам нужна таблица соответствия для месяцев. Следующее преобразование - только начало. Проведите пробежку, и вы заметите, что:

  • Для каждой группы форм будут напечатаны только необходимые строки (все месяцы)
  • Если в группе отсутствует месяц, используется значение по умолчанию
  • Количество отображаемых месяцев меньше или равно. Formsxml / @ CM (согласно запросу)

Возможно, вы также захотите заполнить справочную таблицу на данный момент, заполненную до июля.


[XSLT 1.0]

<xsl:stylesheet version="1.0" 
    xmlns:empo="http://stackoverflow.com/users/253811/empo"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <empo:months>
        <empo:M id="1">Jan</empo:M>
        <empo:M id="2">Feb</empo:M>
        <empo:M id="3">Mar</empo:M>
        <empo:M id="4">Apr</empo:M>
        <empo:M id="5">May</empo:M>
        <empo:M id="6">Jun</empo:M>
        <empo:M id="7">Jul</empo:M>
    </empo:months>

    <xsl:template match="/">
        <table cellspacing="0" cellpadding="0" width="100%" border="1" borderColorDark="#ffffff" borderColorLight="#000000" class="smlFonts">
            <tr height="20" align="center">
                <td rowspan="1" width="10%"><b>Name</b></td>
                <td rowspan="1" width="7%"><b>Net</b></td>
                <td rowspan="1" width="7%"><b>Total</b></td>
                <td rowspan="1" width="8%"><b>Average</b></td>
                <xsl:apply-templates select="*/Forms"/>
            </tr>
        </table>

    </xsl:template>
    <xsl:template match="Forms">
        <xsl:variable name="Forms" select="."/>

        <xsl:for-each select="document('')/*/
            empo:months/empo:M[@id &lt;= $Forms/../@CM]">
            <xsl:choose>
                <xsl:when test="$Forms/Form[@M=current()/@id]">
                    <xsl:apply-templates 
                        select="$Forms/Form[@M=current()/@id]"/>
                </xsl:when>
                <xsl:otherwise>
                    <tr>
                        <td>
                            <xsl:value-of select="."/>
                        </td>
                        <td>
                            0.0000
                        </td>
                        <td>
                            0.0000
                        </td>
                        <td>
                            0.0000
                        </td>
                    </tr>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:for-each>

        <tr style="color:red">
            <td>
                <xsl:value-of select="@NAME"/>
                <xsl:text> Total</xsl:text>
            </td>
            <td>
                <xsl:value-of select="@NACRES"/>
            </td>
            <td>
                <xsl:value-of select="@TBONUSP"/>
            </td>
            <td>
                <xsl:value-of select="@TP"/>
            </td>
        </tr>
    </xsl:template>

    <xsl:template match="Form">
        <tr>
            <td>
                <xsl:value-of select="@GroupName"/>
            </td>
            <td>
                <xsl:value-of select="@NACRES"/>
            </td>
            <td>
                <xsl:value-of select="@TBONUSP"/>
            </td>
            <td>
                <xsl:value-of select="@TP"/>
            </td>
        </tr>
    </xsl:template>

</xsl:stylesheet>
0 голосов
/ 03 августа 2011
    <xsl:for-each select="document('')/*/
        empo:Weeks/empo:M[@id &lt;= $Forms/../@CW]">
        <xsl:choose>
            <xsl:when test="$Forms/Form[@W=current()/@id]">
                <xsl:apply-templates   select="$Forms/Form[@W=current()/@id]"/>
            </xsl:when>
            <xsl:otherwise>
                <tr>
                    <td>
                        <xsl:value-of select="concat($Forms/@PRONME,' ',., ' ','Total')"/>
                    </td>
                    <td>
                        0.0000
                    </td>
                    <td>
                        0.0000
                    </td>
                    <td>
                        0.0000
                    </td>
                </tr>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:for-each>
...