gpt4 book ai didi

XSLT 标记化节点集

转载 作者:行者123 更新时间:2023-12-02 03:55:40 24 4
gpt4 key购买 nike

我正在尝试创建一个变量,它以 init cap 形式存储输入字符串 (TypeInput) 的值。这个新变量将在我的样式表的不同地方使用。我创建了一个模板,我调用它来将输入字符串转换为 init cap 形式。但是,当我运行样式表时,生成的变量 TypeInputInitCap 在调试器中显示为 NodeSet(1) 并且不在我的输出中输出文本。任何想法为什么?请参见下面的示例。

<xsl:variable name="TypeInputInitCap">
<xsl:call-template name="ConvertToInitCapString">
<xsl:with-param name="str" select="$TypeInput"></xsl:with-param>
</xsl:call-template>
</xsl:variable>

<xsl:template name="ConvertToInitCapString">
<xsl:param name="str"></xsl:param>
<!-- Extract each component of the name delimited by . -->
<xsl:variable name="TokenNodeSet">
<xsl:for-each select="tokenize($str, '.')">
<!-- Init cap each component -->
<xsl:value-of select="concat(upper-case(substring(.,1,1)), lower-case(substring(.,2)))"></xsl:value-of>
</xsl:for-each>
</xsl:variable>
<xsl:for-each select="$TokenNodeSet">
<xsl:value-of select="."></xsl:value-of>
<xsl:if test="not(last())">
<xsl:text>.</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>

最佳答案

我认为问题在于 $TokenNodeSet 变量只包含一个字符串,因此第二个 for-each 只循环一次。

不如这样做:

<xsl:template name="ConvertToInitCapString"> 
<xsl:param name="str"></xsl:param>
<xsl:for-each select="tokenize($str, '\.')">
<xsl:value-of select="concat(upper-case(substring(.,1,1)), lower-case(substring(.,2)))"/>
<xsl:if test="not(last())">
<xsl:text>.</xsl:text>
</xsl:if>
</xsl:for-each>

编辑

按照 LarsH 在评论中的建议修复了上面的 tokenize() 调用

关于XSLT 标记化节点集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12784190/

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