$ binding-path包含类似Contact!ShowsInterest
的内容,应转换为Contact/@ShowsInterest
这是我到目前为止所尝试的:
<xsl:variable name="bindpath" select="translate($binding-path, '!','/@')" />
<xsl:value-of select="concat('{Binding XPath=',$bindpath,'}')"/>
或
<xsl:variable name="bindpath" select="translate($binding-path, '!','/@')" />
<xsl:value-of select="concat('{Binding XPath=',$bindpath,'}')"/>
但无论我尝试什么,结果总是Contact/ShowsInterest
答案 0 :(得分:3)
translate()
函数只能用单个字符替换单个字符的每个出现(或者什么都没有,从而删除它)。
使用强>:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="binding-path" select="'Contact!ShowsInterest'"/>
<xsl:template match="/">
<xsl:variable name="bindingpath">
<xsl:value-of select="substring-before($binding-path, '!')"/>
<xsl:text>/@</xsl:text>
<xsl:value-of select="substring-after($binding-path, '!')"/>
</xsl:variable>
<xsl:value-of select="$bindingpath"/>
</xsl:template>
</xsl:stylesheet>
当对任何XML文档(未使用)应用此转换时,会生成所需的正确结果:
Contact/@ShowsInterest
<强> II。 XSLT 2.0
使用XPath 2.0 replace()
函数:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="binding-path" select="'Contact!ShowsInterest'"/>
<xsl:template match="/">
<xsl:variable name="bindingpath" select="replace($binding-path, '!', '/@')"/>
<xsl:value-of select="$bindingpath"/>
</xsl:template>
</xsl:stylesheet>
此转换产生相同的正确结果:
Contact/@ShowsInterest