如何从 xslt 中的字段解析管道符号。例如
假人1|假人2|假人3|假人4
问候,莎拉
如果您使用 XSLT 2.0 处理器,您可以使用该tokenize
函数(http://www.w3.org/TR/xpath-functions/#func-tokenize),例如输入
<foo>dummy1|dummy2|dummy3|dummy4</foo>
你可以匹配
<xsl:template match="foo">
<xsl:value-of select="tokenize(., '\|')"/>
</xsl:template>
输出dummy1 dummy2 dummy3 dummy4
。如果您使用 XSLT 1.0 处理器,您可以检查它是否支持像http://www.exslt.org/str/functions/tokenize/这样的扩展函数,或者您需要编写一个递归的命名模板来拆分输入。
在 xlst 1.0 我通常使用命名模板的递归调用,例如
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:variable name="dummyVar" select="'dummy1|dummy2|dummy3|dummy4'" />
<xsl:variable name="delimiter" select="'|'" />
<xsl:template match="/">
<dummies>
<xsl:call-template name="parseDummy">
<xsl:with-param name="parsedString" select="$dummyVar" />
</xsl:call-template>
</dummies>
</xsl:template>
<xsl:template name="parseDummy">
<xsl:param name="parsedString" />
<xsl:choose>
<xsl:when test="contains($parsedString, $delimiter)">
<xsl:element name="{substring-before($parsedString, $delimiter)}" />
<xsl:call-template name="parseDummy">
<xsl:with-param name="parsedString" select="substring-after($parsedString, $delimiter)" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:element name="{$parsedString}" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
你需要对解析的值做些什么,例如我用假人的名字构造元素。
小心正在发生变化的上下文。