首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

XSLT 1.0 -使用分隔符拆分for-each循环中的字段

XSLT 1.0是一种用于对XML文档进行转换和处理的编程语言。它使用XSLT样式表来定义如何将一个XML文档转换为另一个XML文档、HTML文档或纯文本文档。

在XSLT 1.0中,要使用分隔符拆分for-each循环中的字段,可以使用字符串处理函数和递归来实现。以下是一个示例代码:

代码语言:txt
复制
<xsl:template match="/">
  <xsl:variable name="input" select="'field1,field2,field3'" /> <!-- 输入字段 -->
  <xsl:call-template name="split">
    <xsl:with-param name="input" select="$input" />
  </xsl:call-template>
</xsl:template>

<xsl:template name="split">
  <xsl:param name="input" />
  <xsl:param name="delimiter" select="','" /> <!-- 分隔符,默认为逗号 -->
  
  <xsl:choose>
    <xsl:when test="contains($input, $delimiter)">
      <xsl:variable name="field" select="substring-before($input, $delimiter)" /> <!-- 获取第一个字段 -->
      <xsl:value-of select="$field" />
      <xsl:text> </xsl:text> <!-- 输出字段后添加空格,可以根据需要修改 -->
      
      <xsl:call-template name="split">
        <xsl:with-param name="input" select="substring-after($input, $delimiter)" /> <!-- 递归调用,处理剩余字段 -->
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$input" /> <!-- 输出最后一个字段 -->
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

上述代码中,首先定义了一个名为input的变量,它包含了待拆分的字段。然后通过调用名为split的模板来实现字段的拆分。split模板接受两个参数:input表示待拆分的字段,delimiter表示分隔符,默认为逗号。在模板中,使用contains函数判断字段中是否包含分隔符,如果包含,则使用substring-before函数获取第一个字段,并输出到结果中。然后递归调用split模板,处理剩余的字段。如果不包含分隔符,则说明已经到达最后一个字段,直接输出到结果中。

这种方法可以适用于XSLT 1.0中拆分字段的需求。然而,XSLT 1.0在处理字符串和递归方面的功能相对有限。如果需要更复杂的字符串处理,建议考虑升级到XSLT 2.0或更高版本,或者使用其他编程语言来处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

学习 XSLT:XML文档转换的关键

一个

元素可能表示 HTML 表格、一件家具或其他东西 - 浏览器不知道如何显示它!

01
  • while read line - [linux学习]

    循环中的重定向 或许你应该在其他脚本中见过下面的这种写法: while read line do … done < file 刚开始看到这种结构时,很难理解< file是如何与循环配合在一起工作的。因为循环内有很多条命令,而我们之前接触的重定向都是为一条命令工作的。这里有一个原则,这个原则掌握好了,这个问题就很简单了: 对循环重定向的输入可适用于循环中的所有需要从标准输入读取数据的命令; 对循环重定向的输出可适用于循环中的所有需要向标准输出写入数据的命令; 当在循环内部显式地使用输入或输出重定向,内部重定向覆盖外部重定向。 上面的while结构中,read命令是需要从标准输入中读取数据的。我们来详细了解一下read命令的用法吧,这个命令是shell脚本中使用频率最高的命令之一。 read 先来看一下read的命令语法: read arg1 arg2 arg3 arg4 … read是一个用来赋值的命令,它需要从标准输入获得值,然后把这些值按位置依次赋值给变量arg1、arg2、arg3、arg4…,输入的时候以空格作为字段分隔符。 read的一个最大特性是可以在脚本中产生交互,因为它从标准输入读取数据。read之所以很常用,一是因为我们经常需要赋值,二是因为它可以交互,三是read能够一次给多个变量赋值。 readhostipnamelinux10.0.0.1licongreadhostipnamelinux10.0.0.1licong read host ip name linux 10.0.0.1 licong echo hosthosthost ip namelinux10.0.0.1licongnamelinux10.0.0.1licongname linux 10.0.0.1 licong 可以看到,linux、10.0.0.1、licong分别被赋值给了变量host、ip和name。再看: readhostiplinux10.0.0.1licongreadhostiplinux10.0.0.1licong read host ip linux 10.0.0.1 licong echo hostlinuxhostlinuxhost linux echo ip10.0.0.1licongip10.0.0.1licongip 10.0.0.1 licong 当我们输入的字段比变量数目多时,最后一个变量的值将不只一个字段,而是所有剩余的内容;当输入字段比变量数少时,多余的变量将是空值,你可以自己试试。现在我们再来看 while read line do … done < file read通过输入重定向,把file的第一行所有的内容赋值给变量line,循环体内的命令一般包含对变量line的处理;然后循环处理file的第二行、第三行。。。一直到file的最后一行。还记得while根据其后的命令退出状态来判断是否执行循环体吗?是的,read命令也有退出状态,当它从文件file中读到内容时,退出状态为0,循环继续惊醒;当read从文件中读完最后一行后,下次便没有内容可读了,此时read的退出状态为非0,所以循环才会退出。 另一种也很常见的用法: command | while read line do … done 如果你还记得管道的用法,这个结构应该不难理解吧。command命令的输出作为read循环的输入,这种结构长用于处理超过一行的输出,当然awk也很擅长做这种事

    02

    awk 简明教程

    awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。 数据可以来自标准输入、一个或多个文件,或其它命令的输出。 它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。 它在命令行中使用,但更多是作为脚本来使用。 awk 的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。 awk 分别代表其作者姓氏的第一个字母因为它的作者是三个人,分别是 Alfred Aho、Brian Kernighan、Peter Weinberger。 gawk是awk的GNU版本,它提供了 Bell 实验室和 GNU 的一些扩展。

    02
    领券