gpt4 book ai didi

variables - 在 XSLT 中设置标志以通过循环检测第一次

转载 作者:行者123 更新时间:2023-12-02 15:38:01 27 4
gpt4 key购买 nike

xslt 的新手。在 umbraco 中使用它,所以它是 1.0 版本。

尝试在内联页脚列表中的链接之间插入分隔符,因此会将它们放在除第一个链接之外的每个链接之前。这是一个简单的编程问题,您在循环外将标志设置为 0,然后一旦进入,您将测试标志是否为 1,如果不是,则跳过在链接之前添加分隔符。作为第一次通过循环的最后一位,您将标志设置为 1。

如何在 xslt 中完成此操作?我对语法有点困惑,读到一旦设置了变量值就无法更改它。有人有一个简单的例子吗?

最佳答案

这是一个简单的例子:

<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:param name="pBase" select="'http://myBase.com/'"/>

<xsl:template match="num">
<xsl:if test="position() > 1">, </xsl:if>
<a href="{$pBase}{.}"><xsl:value-of select="."/></a>
</xsl:template>
</xsl:stylesheet>

当此转换应用于以下 XML 文档时:

<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>

产生了想要的、正确的结果:

<a href="http://myBase.com/01">01</a>, <a href="http://myBase.com/02">02</a>, <a href="http://myBase.com/03">03</a>, <a href="http://myBase.com/04">04</a>, <a href="http://myBase.com/05">05</a>, <a href="http://myBase.com/06">06</a>, <a href="http://myBase.com/07">07</a>, <a href="http://myBase.com/08">08</a>, <a href="http://myBase.com/09">09</a>, <a href="http://myBase.com/10">10</a>

在浏览器中显示为:

01 , 02 , 03 , 04 , 05 , 06 , 07 , 08 , 09 , 10

解释:

  1. XSLT 是一种函数式语言——这意味着变量一旦定义就无法更改。

  2. 标准 XPath position() 函数可以用来检查当前节点的位置是否有一个特定的值。

  3. builtin XSLT templates 被使用并且匹配一个元素的那个有这个主体:<xsl:apply-templates/> .这是缩写:<xsl:apply-templates select="child::node()"/>并将模板应用于当前节点的所有节点子节点——按文档顺序。

  4. 因为我们指定了<xsl:strip-space elements="*"/> ,任何元素的纯空白子元素在 XML 文档的解析过程中都被去除了。这只留下顶部元素的非空白子节点 nums他们都是num元素。

  5. position() 的值模板中的函数是当前节点在 <xsl:apply-templates> 时形成的节点列表中的位置。指令被执行。这意味着 position() 的值模板匹配里面的函数num当第一个 num 时为 1元素被处理,2当第2个num元素被处理,...,10 当第 10 个 num元素被处理。

  6. 所有 num 的生成输出position() 值所在的元素大于 1 以字符串“,”开头——完全符合这个问题的要求。对于第一个num元素字符串“,”未生成,因为 position() 的值在这种情况下是 1。

关于variables - 在 XSLT 中设置标志以通过循环检测第一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13465871/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com