我有一个包含多个元素的XML文件。我正在使用XSLT将每个转换为唯一的XML文件。每个都有一个我想在文件名中使用的id属性,我正在尝试清理属性值。 ids都以capi_开头,有些以_output结尾,因此格式为capi_xxx_yyy_output或capi_xxx_yyy。
我可以在capi _:
之后提取字符串 <xsl:for-each select="//section">
<xsl:variable name="cleanId" select="substring-after(@id, '_')" />
从这个新字符串开始,如何在_output之前获取字符串?我试过这个,但它不起作用:
<xsl:for-each select="//section">
<xsl:variable name="cleanId" select="substring-before(substring-after(@id, '_'), '_output')" />
提前致谢。
答案 0 :(得分:1)
我尝试了这个,但它不起作用:
<xsl:for-each select="//section"> <xsl:variable name="cleanId" select="substring-before(substring-after(@id, '_'), '_output')" />
当id以“_output”结尾时,它会起作用;它没有停止工作。所以只要确保它始终如此:
<xsl:variable name="cleanId" select="substring-before(substring-after(concat(@id, '_output'), '_'), '_output')" />
答案 1 :(得分:0)
您的语法看起来不错,您可能只需要实现<xsl:choose>
。
<xsl:variable name="cleanId">
<xsl:for-each select="//section">
<xsl:choose>
<xsl:when test="contains(@id,'_output')">
<xsl:value-of select="substring-before(substring-after(@id, '_'), '_output')" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring-after(@id, '_')" />
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:variable>