使用XSLT将XML转HTML时空格显示为异常字符的解决方法
XML转HTML时非断行空格显示异常的解决方法
问题场景
我用VB.NET编写了代码,通过XSLT样式表将XML文件转换为HTML文件,VB.NET代码如下:
Dim xslt As New XslCompiledTransform(True) xslt.Load(stylesheet) Dim HTMLoutputFile As String = TempDirectory + "test.html" If File.Exists(HTMLoutputFile) Then File.Delete(HTMLoutputFile) End If Dim outputStream As New FileStream(HTMLoutputFile, FileMode.Append) xslt.Transform(XMLoutputFile, Nothing, outputStream) outputStream.Close()
在XSLT中我使用 插入非断行空格,但生成的HTML中该字符显示为带问号的黑钻石异常符号,尝试改用 后问题依旧。以下是XSLT的部分代码:
<span class="Normal"> <xsl:for-each select="//reasons/Addendum"> <b>Addendum Note</b> (<xsl:value-of select="sectionEnctInfo/NoteCreator"/>; <xsl:value-of select="sectionEnctInfo/datetimeStamp"/>)<br/> <xsl:call-template name="multilineNote"> <xsl:with-param name="theNoteItemNode" select="noteItem"/> </xsl:call-template> <xsl:if test="noteItem/imageNoteFile != ''"> <br/><img src="{noteItem/imageNoteFile}"></img><br/> </xsl:if> <br/> </xsl:for-each> </span>
解决方法
- 直接使用非断行空格字符:在XSLT代码中直接输入非断行空格(可通过按住Alt键输入数字0160生成),替代实体引用
 或 。 - 统一编码配置:
- 将XSLT文件保存为UTF-8编码。
- 修改VB.NET代码,使用
XmlTextWriter指定UTF-8编码输出HTML,避免系统默认编码导致字符乱码,代码修改如下:
Dim xslt As New XslCompiledTransform(True) xslt.Load(stylesheet) Dim HTMLoutputFile As String = TempDirectory + "test.html" If File.Exists(HTMLoutputFile) Then File.Delete(HTMLoutputFile) End If Using writer As New XmlTextWriter(HTMLoutputFile, Encoding.UTF8) xslt.Transform(XMLoutputFile, writer) End Using
- XSLT显式设置输出编码:在XSLT的根节点下添加
<xsl:output>节点,明确指定输出格式和编码:
<xsl:output method="html" encoding="UTF-8" indent="yes"/>
内容的提问来源于stack exchange,提问作者Peter Sun
相关产品推荐
相关产品推荐

