Как присвоить форматированное значение другой переменной в xslt - PullRequest
0 голосов
/ 27 февраля 2012
<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;

1 Ответ

2 голосов
/ 27 февраля 2012

Давайте предположим, что для вашего удобства мы используем образец 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...