如何将格式化值分配给xslt中的另一个变量

时间:2012-02-27 10:55:43

标签: xslt

<xsl:value-of select="substring-before($temp1,';')" disable-output-escaping="yes"/>


其中temp1="fassdf sdf; asdf &amp;dfsdfsdf;fsdfsf;"

上面的代码用于使用“;”分割值。问题是temp1有&amp;,因此它将该值除以转义序列字符;。所以我的输出错了。但是,如果我使用disable-output-escaping="yes",则"&amp;"会转换为&amp;。

如何从字符串中获取格式化的值?因此,如果我拆分字符串,我将不会遇到任何问题。因为我会得到&amp;而不是&amp;

1 个答案:

答案 0 :(得分:2)

让我们为您的方便假设一个示例XML ..

<?xml version="1.0" encoding="utf-8"?>
<root>
  <child>sharepoint; R&amp;D;Department;</child>
</root>

输出所需的XSLT代码:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
  <xsl:output method="text" indent="no"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="/">
    <xsl:apply-templates select="node()"/>
  </xsl:template>

  <xsl:template match="child">
    <xsl:call-template name="SplitString">
      <xsl:with-param name="StringVal" select="concat(.,';')"/>
    </xsl:call-template>
  </xsl:template>

  <xsl:template name="SplitString">
    <xsl:param name="StringVal"/>
    <xsl:variable name="first" select="substring-before($StringVal, ';')" />
    <xsl:variable name="remaining" select="substring-after($StringVal, ';')" />

    <xsl:value-of select="normalize-space($first)" disable-output-escaping="yes" />

    <xsl:if test="$remaining">
      <xsl:value-of select="'&#10;'"/>
      <xsl:call-template name="SplitString">
        <xsl:with-param name="StringVal" select="$remaining" />
      </xsl:call-template>

    </xsl:if>
  </xsl:template>

</xsl:stylesheet>

这是你得到的输出:

sharepoint
R&D
Department