XSL中的特殊字符

时间:2015-04-07 08:23:40

标签: javascript xml firefox xslt xslt-1.0

我正在进行XSL 1.0转换,以便在Firefox中显示XML时获得HTML可视化。 在我原来的XML中,我有像

这样的字符
é è ‘...

我需要将它们转换为

é, è, ‘...

我使用过这个模板:

<xsl:template name="string-replace-all">
  <xsl:param name="text" />
  <xsl:param name="replace" />
  <xsl:param name="by" />
  <xsl:choose>
    <xsl:when test="contains($text, $replace)">
      <xsl:value-of select="substring-before($text,$replace)" />
      <xsl:value-of select="$by" />
      <xsl:call-template name="string-replace-all">
        <xsl:with-param name="text" select="substring-after($text,$replace)" />
        <xsl:with-param name="replace" select="$replace" />
        <xsl:with-param name="by" select="$by" />
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$text" />
    </xsl:otherwise>
  </xsl:choose>

调用每个特殊字符(例如&amp; egrave;):

            <xsl:variable name="newtext">
              <xsl:call-template name="string-replace-all">
                <xsl:with-param name="text" select="$originaltext" />
                <xsl:with-param name="replace" select="'&amp;egrave;'" />
                <xsl:with-param name="by" select="'è'" />
              </xsl:call-template>
            </xsl:variable>

是否有解决方案我可以直接将&amp;替换为&amp;例如,不需要为我希望存在的每个特殊字符调用替换模板?

3 个答案:

答案 0 :(得分:1)

  

有没有我可以直接替换的解决方案进入&amp;对于   示例,无需为每个调用替换模板   我希望存在的特殊性格?

为什么不在输出文本时简单地禁用转义?例如,给定输入:

<content>Lor&amp;eacute;m ipsum &amp;lsquo;dolor&amp;lsquo; sit am&amp;egrave;t, consectetuer adipiscing elit.</content>

您可以将样式表处理为:

<p>
    <xsl:value-of select="content" disable-output-escaping="yes"/>
</p>

并返回:

<p>Lor&eacute;m ipsum &lsquo;dolor&lsquo; sit am&egrave;t, consectetuer adipiscing elit.</p>

浏览器应该呈现为:

enter image description here

答案 1 :(得分:1)

这似乎对我(Firefox的旧版本)有用:

<强> XML

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="mystyle.xsl"?>
<root>
    <description>Article Containing Escaped Entitites</description>
    <content>Lor&amp;eacute;m ipsum &amp;lsquo;dolor&amp;lsquo; sit am&amp;egrave;t, consectetuer adipiscing elit.</content>
</root>

<强> mystyle.xsl中

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/root">
    <html>
        <body>
            <h2><xsl:value-of select="description"/></h2>
            <p id="content">
                <xsl:value-of select="content"/>
            </p>

            <script>
    var element = document.getElementById("content");
    element.innerHTML = element.innerHTML.replace(/&amp;amp;/g,'&amp;');
            </script>

        </body>
    </html>
</xsl:template>

</xsl:stylesheet>

结果(截图):

enter image description here

警告 :我不是Javascript专家;这只是我拼命拼凑起来的东西。

答案 2 :(得分:-2)

String htmlstring = "Put Your HTML string here"
            + htmlstringbuf
                    .toString()
                    .replaceAll("&nbsp;", " ")
                    .replaceAll("&", "&amp;")
                    .replaceAll("null", " ")
                    .replaceAll("<\\?xml version=\"1.0\" encoding=\"UTF-8\"\\?>"," ")
                    .replaceAll("Â", "<br></br>")
                    .replaceAll("<\\?xml version = '1.0' encoding ='UTF-8'\\?>",
                            " ") + "</body>";