2014-09-24 60 views
0

我發佈了三週前的關於XSL 1.0的問題,它收到了關於for-each的一個很好的答案。但是現在我需要一些關於在節點內部進行for-each的建議。我很確定這是一個小問題,但請幫助我。XSL - 爲節點內的每個節點設置

我的XML:

<?xml version="1.0" encoding="utf-8" ?> 
    <eOrden xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <EquipoServicio> 
     <eElemento> 
     <Clave>PAMO1</Clave> 
     <Descripcion>MODEM</Descripcion> 
     </eElemento> 
     <eElemento> 
     <Clave>ISP01</Clave> 
     <Descripcion>PRODIGY</Descripcion> 
     </eElemento> 
     <eElemento> 
     <Clave>IFR28</Clave> 
     <Descripcion>ACCESS</Descripcion> 
     </eElemento> 
    </EquipoServicio> 
    </eOrden> 

我的XSL(到目前爲止):

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:template match="/eOrden"> 

    <html> 
     <head></head> 
      <body> 
      <div> 
       <section class="sections"> 
        <fieldset> 
         <legend class="lbold">EQUIPO O SERVICIO</legend> 

         <div class="primerdiv" style="width:99.5%; padding-top:5px; padding-bottom: 7px; "> 

          <xsl:for-each select="EquipoServicio/eElemento[position() mod 7 = 1]" > 
           <div class="primerdiv letra" style="width:12.3%;"> 
            <div class="primerdiv letra" style="padding-top:2px; padding-bottom: 2px; width:100%"> 
             <div class="primerdiv eqsertitulo lbold" style="text-align:right; width:100%"> 
              EQ. O SERV.:&#xA0; 
             </div> 
             <div class="primerdiv eqsertitulo lbold" style="text-align:right; width:100%"> 
              DESCR.:&#xA0; 
             </div> 
             </div> 
            </div> 

           <xsl:apply-templates select=". | following-sibling::EquipoServicio/eElemento[position() &lt; 7]"/> 

          </xsl:for-each> 

         </div> 
        </fieldset> 
       </section> 
      </div> 
      </body> 
    </html> 
</xsl:template> 

<xsl:template match="eElemento"> 
    <div class="altbordeptes" style="float:left; width:12%;"> 
     <div class="primerdiv letra" style="width:98.5%;"> 
      <div class="eqser letra" style="border: 1px solid #D0D0D0; text-align:left; width:98.5%;"> 
       <xsl:value-of select="Clave"/> 
      </div> 
     </div> 
     <div class="primerdiv letra" style="width:98.5%;"> 
      <div class="eqser letra" style="border: 1px solid #D0D0D0; text-align:left; width:99.5%;"> 
       <xsl:value-of select="Descripcion"/> 
      </div> 
     </div> 
    </div> 
</xsl:template> 

</xsl:stylesheet> 

爲什麼,如果我運行此,迭代只是得到了第一eElemento節點,而不是上的信息整個三個節點?如果我將eElemento節點放在EquipoServicio節點之外,則輸出是正確的!

我希望得到的結果是這樣的:提前

<section class="sections"> 
     <fieldset> 
      <legend class="lbold">EQUIPO O SERVICIO</legend> 
      <div class="primerdiv" style="width:99.5%; padding-top:5px; padding-bottom: 7px; "> 
       <div class="primerdiv letra" style="width:12.3%;"> 
        <div class="primerdiv letra" style="padding-top:2px; padding-bottom: 2px; width:100%"> 
        <div class="primerdiv eqsertitulo lbold" style="text-align:right; width:100%"> 
                  EQ. O SERV.:&nbsp; 

        </div> 
        <div class="primerdiv eqsertitulo lbold" style="text-align:right; width:100%"> 
                   DESCR.:&nbsp; 

        </div> 
        </div> 
       </div> 
       <div class="altbordeptes" style="float:left; width:12%;"> 
        <div class="primerdiv letra" style="width:98.5%;"> 
        <div class="eqser letra" style="border: 1px solid #D0D0D0; text-align:left; width:100%;">PAMO1</div> 
        </div> 
        <div class="primerdiv letra" style="width:98.5%;"> 
        <div class="eqser letra" style="border: 1px solid #D0D0D0; text-align:left; width:100%;">MODEM</div> 
        </div> 
       </div> 
       <div class="altbordeptes" style="float:left; width:12%;"> 
        <div class="primerdiv letra" style="width:98.5%;"> 
        <div class="eqser letra" style="border: 1px solid #D0D0D0; text-align:left; width:100%;">ISP01</div> 
        </div> 
        <div class="primerdiv letra" style="width:98.5%;"> 
        <div class="eqser letra" style="border: 1px solid #D0D0D0; text-align:left; width:100%;">PRODIGY</div> 
        </div> 
       </div> 
       <div class="altbordeptes" style="float:left; width:12%;"> 
        <div class="primerdiv letra" style="width:98.5%;"> 
        <div class="eqser letra" style="border: 1px solid #D0D0D0; text-align:left; width:100%;">IFR28</div> 
        </div> 
        <div class="primerdiv letra" style="width:98.5%;"> 
        <div class="eqser letra" style="border: 1px solid #D0D0D0; text-align:left; width:100%;">ACCESS</div> 
        </div> 
       </div> 

      </div> 
     </fieldset> 
     </section> 

感謝。 Tonio。

回答

0

嘗試改變:

<xsl:apply-templates select=". | following-sibling::EquipoServicio/eElemento[position() &lt; 7]"/> 

到:

<xsl:apply-templates select=". | following-sibling::eElemento[position() &lt; 7]"/> 

這兩個是不是幾乎一樣。


注意

您的輸入是無效的:在EquipoServicio元素沒有關閉標籤。消除所有對這個問題不重要的「噪音」(例如CSS)也會更好。