使用 XSL 替换单个 XML 元素中的多个字符

本文关键字:字符 元素 XSL 替换 单个 XML 使用 | 更新日期: 2023-09-27 18:32:13

我正在用 br 标记替换 &#10 以在使用 XSL 转换 XML 时显示新行。 我想将空格替换为其可能同时 &nbsp 或其他东西的相应代码。示例代码如下。 请为我建议我该怎么办。

而XML文件可能------------

<?xml version="1.0" encoding="iso-8859-1"?><?xml-stylesheet type="text/xsl"     
href="task.xsl"?><Nodes><sNode><Word><![CDATA[1
2.............3............4............5
 3]]></Word></sNode></Nodes>

由于空格自动省略,所以在这里......表示空格。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
    <html>
      <body>
        <table>
           <xsl:for-each select="Nodes/sNode">
              <tr>
                 <td>
                    <xsl:call-template name="replace-string-with-element">
                       <xsl:with-param name="text" select="Word"/>
                       <xsl:with-param name="replace" select="'&#10;'"/>
                       <xsl:with-param name="with" select="'br'"/>
                    </xsl:call-template>
                 </td>
                </tr>
             </xsl:for-each>
          </table>
       </body>
    </html>
 </xsl:template>

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

使用 XSL 替换单个 XML 元素中的多个字符

您可以按如下方式使用xsl:character-map

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="fn xs">
    <xsl:character-map name="replaceChars">
        <xsl:output-character character="&#10;" string="br"/>
    </xsl:character-map>
    <xsl:output method="xml" version="1.0" encoding="UTF-8" use-character-maps="replaceChars" indent="yes"/>
    <!-- Implement your templates -->   
</xsl:stylesheet>

甚至可以在外部 XSLT 的xsl:character-map中保存所有字符并使用<xsl:import href="characterFile.xslt" />


若要在样式表中实现这一点,请使用以下 XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:character-map name="replaceChars">
        <xsl:output-character character="&#10;" string="br"/>
    </xsl:character-map>
    <xsl:output method="html"  use-character-maps="replaceChars"/>
   <xsl:template match="/">
    <html>
      <body>
        <table>
           <xsl:for-each select="Nodes/sNode">
              <tr>
                 <td>
                    <xsl:value-of select="Word" />
                 </td>
                </tr>
             </xsl:for-each>
          </table>
       </body>
    </html>
 </xsl:template>