1

$ binding-pathには、次のようなものが含まれていますContact!ShowsInterestContact/@ShowsInterest

これは私がこれまでに試したことです:

<xsl:variable name="bindpath" select="translate($binding-path, '!','/&#x40;')" />
                <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

4

1 に答える 1

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

XPath2.0replace()関数を使用します。

<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
于 2013-03-25T14:32:32.727 に答える