【问题标题】:XSL - Make a for-each inside a nodeXSL - 在节点内创建一个 for-each
【发布时间】:2014-09-24 00:35:16
【问题描述】:

我在三周前发布了一个关于 XSL 1.0 的问题,关于 for-each 得到了很好的回答。但现在我需要一些关于在节点内创建 for-each 的建议。我很确定这是一个菜鸟问题,但请帮帮我。

我的 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>

提前致谢。 托尼奥。

【问题讨论】:

    标签: xml foreach xslt-1.0


    【解决方案1】:

    尝试改变:

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

    到:

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

    这两个几乎不一样。


    注意

    您的输入无效:EquipoServicio 元素没有结束标记。删除所有对问题无关紧要的“噪音”(例如 CSS)也会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 2011-10-30
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      相关资源
      最近更新 更多