我有这个xslt工作:
<xsl:when test="area_of_expertise">
<div>
<xsl:value-of select="area_of_expertise"/>
</div>
</xsl:when>
但我需要的是:
<xsl:when test="area_of_expertise">
<div id="<xsl:value-of select="area_of_expertise"/>">
<xsl:value-of select="area_of_expertise"/>
</div>
</xsl:when>
然而,第二个例子有错误..有谁知道为什么?
顺便问一下,有没有办法可以将节点的名称area_of_expertise
转换为areaOfExperiseLabel
并将其作为ID插入?我真正需要的输出是:
<div id="areaOfExpertiseLabel">
asasdasdasd
</div>
答案 0 :(得分:3)
它出错的原因是因为它不再是有效的XML。
要做你想做的事情:
<xsl:when test="title">
<div id="{title}">
<xsl:value-of select="title"/>
</div>
</xsl:when>
您可以在{}标记内放置任何类型的选择器,如果您有复杂的内容,甚至可以引用变量。
<xsl:variable name="some_complex_variable">
<xsl:value-of select="title"/>
</xsl:variable>
<xsl:when test="title">
<div id="{$some_complex_variable}">
<xsl:value-of select="title"/>
</div>
</xsl:when>
第三种冗长的方法是使用xsl:attribute动态附加属性:
<xsl:when test="title">
<div>
<xsl:attribute name="id" select="title"/>
</div>
</xsl:when>
答案 1 :(得分:1)
对于第二部分,从下划线转换为驼峰案例,您可能需要查看String Processing in the XSLT Standard Library。将str:subst()
拆分为下划线,str:to-camelcase()
适当更改字母大小写,concat()
添加“Label”后缀,您应该设置。
答案 2 :(得分:1)
对于第一部分,您可以使用:
<xsl:when test="area_of_expertise">
<div>
<xsl:attribute name="id">
<xsl:value-of select="area_of_expertise"/>
</xsl:attribute>
<xsl:value-of select="area_of_expertise"/>
</div>
</xsl:when>
答案 3 :(得分:1)
第二部分尝试使用此模板:
<xsl:template name="parse">
<xsl:param name="input"/>
<xsl:param name="position"/>
<xsl:if test="$position <= string-length($input)">
<xsl:choose>
<xsl:when test="substring($input, $position, 1) = '_'">
<xsl:value-of select="translate(substring($input, $position + 1, 1), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
<xsl:call-template name="parse">
<xsl:with-param name="input" select="$input"/>
<xsl:with-param name="position" select="$position + 2"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring($input, $position, 1)"/>
<xsl:call-template name="parse">
<xsl:with-param name="input" select="$input"/>
<xsl:with-param name="position" select="$position + 1"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
用法:
<xsl:call-template name="parse">
<xsl:with-param name="input" select="'area_of_expertise'"/>
<xsl:with-param name="position" select="1"/>
</xsl:call-template>
答案 4 :(得分:0)
这可能是一个愚蠢的答案,但似乎你需要这个简单的痕迹:
<xsl:when test="area_of_expertise">
<div id="areaOfExperiseLabel">
<xsl:value-of select="area_of_expertise"/>
</div>
</xsl:when>
否则,如果你需要另一个字符串,为什么你会在<xsl:value-of select="area_of_expertise"/>
中为@id
提出异议呢?