【发布时间】: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.: 
</div>
<div class="primerdiv eqsertitulo lbold" style="text-align:right; width:100%">
DESCR.: 
</div>
</div>
</div>
<xsl:apply-templates select=". | following-sibling::EquipoServicio/eElemento[position() < 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.:
</div>
<div class="primerdiv eqsertitulo lbold" style="text-align:right; width:100%">
DESCR.:
</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>
提前致谢。 托尼奥。
【问题讨论】: