逗号分隔的字符串解析XSLT
如何通过逗号分隔的字符串进行循环,这是我在XSLT 1.0中作为参数传递的字符串? EX-逗号分隔的字符串解析XSLT
<xsl:param name="UID">1,4,7,9</xsl:param>
我需要从循环中的每个UID的上述UID参数和collectd节点在我的XML文件
这是一个使用str-split-to-words
模板FXSL的XSLT 1.0解决方案。
注意,该模板允许分割在多个定界符(作为单独的参数字符串传递),因此,即使将1,4 7;9
不使用此解决方案的任何问题进行拆分。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common"
>
<xsl:import href="strSplit-to-Words.xsl"/>
<xsl:output indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:call-template name="str-split-to-words">
<xsl:with-param name="pStr" select="/"/>
<xsl:with-param name="pDelimiters"
select="', ;	 '"/>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>
当下面的XML文档应用这种转变:
<x>1,4,7,9</x>
想要的,正确的结果产生:
<word>1</word>
<word>4</word>
<word>7</word>
<word>9</word>
谢谢。循环这个逗号分隔参数的语法是什么?试过上面的解决方案,但出现错误“找不到执行前缀'http://fxsl.sf.net/'的脚本或外部对象。” 我想我可能没有正确下载文件。 那么,我只需要匹配这个逗号分隔的字符串参数中的每个id值与XML节点id,如果发现匹配收集每个节点的文本显示在输出XML中。请注意,我必须在XSLT 1.0中执行此操作。 – contactkx 2010-05-18 11:55:50
@contactx:你的意思是你不能运行我的转换?你下载了FXSL 1.x吗? '
香草XSLT 1.0可以通过递归解决这个问题。
<xsl:template name="split">
<xsl:param name="list" select="''" />
<xsl:param name="separator" select="','" />
<xsl:if test="not($list = '' or $separator = '')">
<xsl:variable name="head" select="substring-before(concat($list, $separator), $separator)" />
<xsl:variable name="tail" select="substring-after($list, $separator)" />
<!-- insert payload function here -->
<xsl:call-template name="split">
<xsl:with-param name="list" select="$tail" />
<xsl:with-param name="separator" select="$separator" />
</xsl:call-template>
</xsl:if>
</xsl:template>
有预先内置的扩展库,可以做字符串标记化(EXSLT有一个模板,例如),但我怀疑,这是真的有必要在这里。
你碰巧有'string-join'的递归模板吗? – n611x007 2015-04-21 17:56:36
很好的问题(+1)。查看我的答案,找到不涉及显式递归的解决方案。 – 2010-05-17 16:37:22