Xml 属性中带有参数的每个as for循环的XSLT 之前
我有这个XMLXml 属性中带有参数的每个as for循环的XSLT 之前,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,我有这个XML <root> <subscribers nullDays="5"> <subscriber> <ThumbURL> http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg </ThumbURL> </subscriber>
<root>
<subscribers nullDays="5">
<subscriber>
<ThumbURL>
http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg
</ThumbURL>
</subscriber>
<subscriber>
<ThumbURL>
http://cs323321.userapi.com/v323321550/f24/CQ-Zm0_BWnQ.jpg
</ThumbURL>
</subscriber>
...
<subscriber>
<ThumbURL>...</ThumbURL>
</subscriber>
</subscribers>
</root>
http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg
http://cs323321.userapi.com/v323321550/f24/CQ-Zm0_BWnQ.jpg
...
...
XSLT之后,我得到了HTML,其中订阅者将被分成每个div,其中包含img标记
问题:
如何使用xsl:for each生成div等于nullDays属性?以下代码需要订阅者节点多于空天数,但它不能存在:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output encoding="UTF-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"xml:base="http://www.w3.org/1999/xhtml" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" indent="yes"/>
<xsl:template match="root">
<xsl:element name="html">
<xsl:element name="head"/>
<xsl:element name="body">
<xsl:variable name="nullDays" select="subscribers/@nullDays"/>
<xsl:for-each select="subscribers/subscriber">
<xsl:if test="(position() mod $nullDays) = 0">
<xsl:element name="div">
<xsl:attribute name="class">empty-div</xsl:attribute>
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
空div
谢谢大家! 此XSLT 1.0转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="subscribers">
<html>
<xsl:apply-templates select="subscriber"/>
<xsl:call-template name="genEmpty">
<xsl:with-param name="pTimes" select="@nullDays - count(subscriber)"/>
</xsl:call-template>
</html>
</xsl:template>
<xsl:template match="subscriber">
<div><img src="{normalize-space(ThumbURL)}"/></div>
</xsl:template>
<xsl:template name="genEmpty">
<xsl:param name="pTimes" select="0"/>
<xsl:if test="$pTimes >= 0">
<div class="empty-div"/>
<xsl:call-template name="genEmpty">
<xsl:with-param name="pTimes" select="$pTimes -1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<root>
<subscribers nullDays="5">
<subscriber>
<ThumbURL>
http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg
</ThumbURL>
</subscriber>
<subscriber>
<ThumbURL>
http://cs323321.userapi.com/v323321550/f24/CQ-Zm0_BWnQ.jpg
</ThumbURL>
</subscriber>
...
<subscriber>
<ThumbURL>...</ThumbURL>
</subscriber>
</subscribers>
</root>
<html>
<div><img src="http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg"></div>
<div><img src="http://cs323321.userapi.com/v323321550/f24/CQ-Zm0_BWnQ.jpg"></div>
<div><img src="..."></div>
<div class="empty-div"></div>
<div class="empty-div"></div>
<div class="empty-div"></div>
</html>
应用于提供的XML文档时:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="subscribers">
<html>
<xsl:apply-templates select="subscriber"/>
<xsl:call-template name="genEmpty">
<xsl:with-param name="pTimes" select="@nullDays - count(subscriber)"/>
</xsl:call-template>
</html>
</xsl:template>
<xsl:template match="subscriber">
<div><img src="{normalize-space(ThumbURL)}"/></div>
</xsl:template>
<xsl:template name="genEmpty">
<xsl:param name="pTimes" select="0"/>
<xsl:if test="$pTimes >= 0">
<div class="empty-div"/>
<xsl:call-template name="genEmpty">
<xsl:with-param name="pTimes" select="$pTimes -1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<root>
<subscribers nullDays="5">
<subscriber>
<ThumbURL>
http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg
</ThumbURL>
</subscriber>
<subscriber>
<ThumbURL>
http://cs323321.userapi.com/v323321550/f24/CQ-Zm0_BWnQ.jpg
</ThumbURL>
</subscriber>
...
<subscriber>
<ThumbURL>...</ThumbURL>
</subscriber>
</subscribers>
</root>
<html>
<div><img src="http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg"></div>
<div><img src="http://cs323321.userapi.com/v323321550/f24/CQ-Zm0_BWnQ.jpg"></div>
<div><img src="..."></div>
<div class="empty-div"></div>
<div class="empty-div"></div>
<div class="empty-div"></div>
</html>
http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg
http://cs323321.userapi.com/v323321550/f24/CQ-Zm0_BWnQ.jpg
...
...
产生(我猜是)想要的结果:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="subscribers">
<html>
<xsl:apply-templates select="subscriber"/>
<xsl:call-template name="genEmpty">
<xsl:with-param name="pTimes" select="@nullDays - count(subscriber)"/>
</xsl:call-template>
</html>
</xsl:template>
<xsl:template match="subscriber">
<div><img src="{normalize-space(ThumbURL)}"/></div>
</xsl:template>
<xsl:template name="genEmpty">
<xsl:param name="pTimes" select="0"/>
<xsl:if test="$pTimes >= 0">
<div class="empty-div"/>
<xsl:call-template name="genEmpty">
<xsl:with-param name="pTimes" select="$pTimes -1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<root>
<subscribers nullDays="5">
<subscriber>
<ThumbURL>
http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg
</ThumbURL>
</subscriber>
<subscriber>
<ThumbURL>
http://cs323321.userapi.com/v323321550/f24/CQ-Zm0_BWnQ.jpg
</ThumbURL>
</subscriber>
...
<subscriber>
<ThumbURL>...</ThumbURL>
</subscriber>
</subscribers>
</root>
<html>
<div><img src="http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg"></div>
<div><img src="http://cs323321.userapi.com/v323321550/f24/CQ-Zm0_BWnQ.jpg"></div>
<div><img src="..."></div>
<div class="empty-div"></div>
<div class="empty-div"></div>
<div class="empty-div"></div>
</html>
此XSLT 1.0转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="subscribers">
<html>
<xsl:apply-templates select="subscriber"/>
<xsl:call-template name="genEmpty">
<xsl:with-param name="pTimes" select="@nullDays - count(subscriber)"/>
</xsl:call-template>
</html>
</xsl:template>
<xsl:template match="subscriber">
<div><img src="{normalize-space(ThumbURL)}"/></div>
</xsl:template>
<xsl:template name="genEmpty">
<xsl:param name="pTimes" select="0"/>
<xsl:if test="$pTimes >= 0">
<div class="empty-div"/>
<xsl:call-template name="genEmpty">
<xsl:with-param name="pTimes" select="$pTimes -1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<root>
<subscribers nullDays="5">
<subscriber>
<ThumbURL>
http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg
</ThumbURL>
</subscriber>
<subscriber>
<ThumbURL>
http://cs323321.userapi.com/v323321550/f24/CQ-Zm0_BWnQ.jpg
</ThumbURL>
</subscriber>
...
<subscriber>
<ThumbURL>...</ThumbURL>
</subscriber>
</subscribers>
</root>
<html>
<div><img src="http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg"></div>
<div><img src="http://cs323321.userapi.com/v323321550/f24/CQ-Zm0_BWnQ.jpg"></div>
<div><img src="..."></div>
<div class="empty-div"></div>
<div class="empty-div"></div>
<div class="empty-div"></div>
</html>
应用于提供的XML文档时:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="subscribers">
<html>
<xsl:apply-templates select="subscriber"/>
<xsl:call-template name="genEmpty">
<xsl:with-param name="pTimes" select="@nullDays - count(subscriber)"/>
</xsl:call-template>
</html>
</xsl:template>
<xsl:template match="subscriber">
<div><img src="{normalize-space(ThumbURL)}"/></div>
</xsl:template>
<xsl:template name="genEmpty">
<xsl:param name="pTimes" select="0"/>
<xsl:if test="$pTimes >= 0">
<div class="empty-div"/>
<xsl:call-template name="genEmpty">
<xsl:with-param name="pTimes" select="$pTimes -1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<root>
<subscribers nullDays="5">
<subscriber>
<ThumbURL>
http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg
</ThumbURL>
</subscriber>
<subscriber>
<ThumbURL>
http://cs323321.userapi.com/v323321550/f24/CQ-Zm0_BWnQ.jpg
</ThumbURL>
</subscriber>
...
<subscriber>
<ThumbURL>...</ThumbURL>
</subscriber>
</subscribers>
</root>
<html>
<div><img src="http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg"></div>
<div><img src="http://cs323321.userapi.com/v323321550/f24/CQ-Zm0_BWnQ.jpg"></div>
<div><img src="..."></div>
<div class="empty-div"></div>
<div class="empty-div"></div>
<div class="empty-div"></div>
</html>
http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg
http://cs323321.userapi.com/v323321550/f24/CQ-Zm0_BWnQ.jpg
...
...
产生(我猜是)想要的结果:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="subscribers">
<html>
<xsl:apply-templates select="subscriber"/>
<xsl:call-template name="genEmpty">
<xsl:with-param name="pTimes" select="@nullDays - count(subscriber)"/>
</xsl:call-template>
</html>
</xsl:template>
<xsl:template match="subscriber">
<div><img src="{normalize-space(ThumbURL)}"/></div>
</xsl:template>
<xsl:template name="genEmpty">
<xsl:param name="pTimes" select="0"/>
<xsl:if test="$pTimes >= 0">
<div class="empty-div"/>
<xsl:call-template name="genEmpty">
<xsl:with-param name="pTimes" select="$pTimes -1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<root>
<subscribers nullDays="5">
<subscriber>
<ThumbURL>
http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg
</ThumbURL>
</subscriber>
<subscriber>
<ThumbURL>
http://cs323321.userapi.com/v323321550/f24/CQ-Zm0_BWnQ.jpg
</ThumbURL>
</subscriber>
...
<subscriber>
<ThumbURL>...</ThumbURL>
</subscriber>
</subscribers>
</root>
<html>
<div><img src="http://cs323321.userapi.com/v323321550/eea/iakdB20fx20.jpg"></div>
<div><img src="http://cs323321.userapi.com/v323321550/f24/CQ-Zm0_BWnQ.jpg"></div>
<div><img src="..."></div>
<div class="empty-div"></div>
<div class="empty-div"></div>
<div class="empty-div"></div>
</html>
能否显示完整的XSLT代码?快速看一眼,这看起来没问题。在我看来,问题可能是您当前的节点在上述代码生效时不是
。(此外,所需的输出通常会有很大帮助。)@thomas-w如果
订阅者的数量小于订阅者/@nullDays
这对于每个订阅者都不会打印
订阅者/@nullDays+1次您是说如果您的XML中有2个订阅者,那么您希望输出这2个订阅者,以及3个空潜水,把总数增加到5?还是别的什么?如果您显示您的预期输出,可能会有所帮助。谢谢您可以显示完整的XSLT代码吗?快速看一眼,这看起来没问题。在我看来,问题可能是您当前的节点在上述代码生效时不是
。(此外,所需的输出通常会有很大帮助。)@thomas-w如果
订阅者的数量小于订阅者/@nullDays
这对于每个订阅者都不会打印
订阅者/@nullDays+1次您是说如果您的XML中有2个订阅者,那么您希望输出这2个订阅者,以及3个空潜水,把总数增加到5?还是别的什么?如果您显示您的预期输出,可能会有所帮助。谢谢