我正在使用XSLT将非常大的XML文档转换为(X)HTML.对于某些标签,我将它们转换为< div>.我希望能够为这些标记创建唯一的id,使用递增的整数形成唯一id的一部分.
我使用的规则的一个例子是:
<xsl:template match="bookcoll/book">
<div class="book">
<xsl:apply-templates/>
</div>
</xsl:template>
这个XSLT模板运行良好.我现在想要的是标签:
<div class="book">;
变得:
<div class="book" id="book-[COUNTER-VALUE]">
理想情况下,计数器将从1开始,而不是0.
我不知道它是否有很大的不同,我使用Java包javax.xml.parsers和javax.xml.transform来执行实际的转换.我是一个XSLT菜鸟,所以如果有任何我错过的相关信息,请告诉我.
如何在XSLT中实现这一目标?
解决方法:
自然/惯用/故障安全解决方案将是:
<div class="book" id="book-{generate-id()}">
它没有递增,但它保证是独一无二的.它将生成HTML有效的ID字符串(name tokens).
编辑:如果必须递增,请执行以下操作:
<!-- in the calling template… -->
<xsl:apply-templates select="bookcoll/book[xpath to filter them if necessary]" />
<!-- …later -->
<xsl:template match="bookcoll/book">
<div class="book" id="book-{position()}">
<xsl:apply-templates/>
</div>
</xsl:template>
您可以使用format-number()来调整position()的输出以满足您的需要.
position()将返回相对于当前正在处理的“批处理”的节点位置.显式调用< xsl:apply-templates>你确保它们按照你想要的方式编号.
标签:java,xhtml,xslt 来源: https://codeday.me/bug/20190717/1485059.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。