在XSLT中将<br/>更改为换行符

时间:2017-12-19 06:45:52

标签: xslt newline xslt-2.0

我有以下XSLT:

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times"
exclude-result-prefixes="date">
<xsl:output method="html" omit-xml-declaration="yes"/>
  <xsl:template match="//Mail">
    <html>
      <body>
      <p>
        <xsl:value-of xml:space="preserve" select="body"/>
      </p>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

在“身体”中,我想提出以下文字:

Beste, <BR/><BR/>
Dit is een automatische mail m.b.t. een registratie in MyRiziv voor de groepering '{0}' met RIZIV-nummer {1}:<BR/><BR/>

现在,当我将其插入XSLT时,<BR/>一直出现。我希望它们被换行替换。

我期望的输出是:

  

Beste,

     

Dit是een automatische mail m.b.t.在MyRiziv voor de。的注册   groersing'{0}'符合RIZIV-nummer {1}:

     

{0}和{1}将替换为实际值。

我使用以下C#代码进行转换:

 XmlDocument xmlDoc = new XmlDocument();

        xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", "yes"));

        XmlNode rootNode = xmlDoc.CreateElement("Mail");

        XmlNode childElement = xmlDoc.CreateElement("salutation");
        childElement.InnerText = GetTranslation("Salutation"); 
        rootNode.AppendChild(childElement);

        childElement = xmlDoc.CreateElement("body");
        switch (emailType)
        {
            case EmailType.GeneralDataUpdated:
                childElement.InnerText = CreateGeneralDataUpdatedBody(newHci, oldHci, requestor);
                break;
        }
        rootNode.AppendChild(childElement);

XslCompiledTransform xsltTransformer = new XslCompiledTransform();

        using (XmlReader xsltRdr = XmlReader.Create(format))
        {
            xsltTransformer.Load(xsltRdr);
        }

        xmlStream.Position = 0;
        StringWriter results = new StringWriter();

        using (XmlReader xmlRdr = XmlReader.Create(xmlStream))
        {
            xsltTransformer.Transform(xmlRdr, new XsltArgumentList(), results);
        }

        return results.ToString();

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

使用apply-template代替value-of代替正文,以便您可以在输出中处理BR

试试这个:

<xsl:template match="//Mail">
    <html>
        <body>
            <p>
                <xsl:apply-templates select="body"/>
            </p>
        </body>
    </html>
</xsl:template>

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

<xsl:template match="BR">
    <xsl:text>&#xa;</xsl:text>
</xsl:template>

请参阅http://xsltransform.hikmatu.com/pPgCcoq

上的转化