2

我对 XSLT 有疑问...

<xsl:text>&#160;</xsl:text>

然后在生成之后,由于某种原因,生成的 JSP 文件会产生一个“?” 反而。怎么了?

我最近的系统更改:
我更改了 Java5 -> Java6
Weblogic -> Weblogic12
Eclipse Ganymede -> Oracle Pack Eclipse

编辑 1:, <xsl:output method="xml"/>编码=UTF-8

原始 XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:include href="common.xsl"/>

    <xsl:output method="xml"/>

    ...

    <xsl:template name="makeLink">
        <xsl:variable name="fieldtype" select="name()"/>

        <xsl:variable name="currentNode"><xsl:value-of select="generate-id()"/></xsl:variable>

        <xsl:variable name="appendSpace">
            <xsl:for-each select="ancestor::ButtonList[position() = 1]/descendant::Button">
                <xsl:if test="generate-id() = $currentNode and position() &gt; 1">true</xsl:if>
            </xsl:for-each>
        </xsl:variable>

<a href="{$url}">
            <xsl:attribute name="id">btn_<xsl:value-of select="Action"/></xsl:attribute>
            <xsl:call-template name="populateAttributes">
                <xsl:with-param name="fieldtype">
                    <xsl:value-of select="$fieldtype"/>
                </xsl:with-param>
            </xsl:call-template>

            <xsl:copy-of select="@class"/>
            <xsl:copy-of select="@style"/>

            <xsl:text>&lt;span&gt;&lt;span&gt;</xsl:text><xsl:value-of select="$buffer"/><xsl:text>&lt;/span&gt;&lt;/span&gt;</xsl:text>
</a>
        <xsl:if test="not(@omitWhiteSpace)">
            <xsl:text>&#160;</xsl:text>
        </xsl:if>
        <xsl:if test="ReadOnly and ReadOnly != 'someReadOnlyMethod'
            and ReadOnly != 'someReadyOnlyMethod'
            and ReadOnly != ''">
            <xsl:text>&lt;/c:if&gt;</xsl:text>
        </xsl:if>
</xsl:template>
....

转换后(在 XSLT 之后)和生成的 JSP 页面:

<%@ page contentType = "text/html;charset=GBK"%>
<%@ page isELIgnored = "false"%>
<%@ page language="java" 
import=" my.controller.*, my.core.config.*, my.core.datastructure.*, my.core.error.*, my.core.util.*,
my.service.Constants, my.service.modulesvr.ModuleBean, myW.sn.*, java.util.Locale, java.util.Map"%>
<%@ taglib uri="http://www.mycompany.com/my/tags/htmltag-10" prefix="html"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%MySn mySession = (MySn) session.getValue("MySn"); QuickSearchController mb = (mySession == null) ? null : (QuickSearchController)
mySession.getModuleBean(); String sessionToken = mySession.getSessionToken(); String htmlCharSet = mySession.getEncoding();
MyUsr user = mySession.getMyUsr(); String[] result; Object o;%>

.........

<a href="#" id="btn_NEWPROP" onclick="submitForm('/xxx/xxx/NEWPROP','theForm');    return (false);" class="actionBtn"><span><span>NEW PROP</span></span></a> </c:if>

编辑2:如果我使用<xsl:text>&amp;#160;</xsl:text>而不是<xsl:text>&#160;</xsl:text>......问题似乎已经消失了。在 JSP 中,它将显示为  ,而在浏览器中,它被视为一个不间断的空格,这是预期的。

4

1 回答 1

2

如果您的编码错误,通常会发生这种情况。你用什么编码写你的输出?你是如何提供页面的?可能您正在以 UTF-8 进行序列化,但尝试以 ISO-8859-1(或 Windows-1252)显示,反之亦然。

检查某处的默认编码是否已更改。

仅仅因为你说<xsl:output method="xml" encoding="UTF-8"/>并不意味着程序会尊重它。XSLT 是否嵌入在一段 Java 中?Java 是否控制流/读取器/写入器?

如果您可以保存文件的一部分并将其转储为 HEX,您应该很快就能找到。如果您看到0xC2 0xA0,那么您的文件确实是 UTF-8。但是,如果您只是0xA0单独看到,那么您处于 ISO-8859-1 或它的密切关系之一。

It's also possible that the page is being rendered properly, but the page is being served up with the wrong encoding. Can you look at the headers returned, perhaps by using Firebug in Firefox or in Chrome "Web Developer->Information->View Response Headers" or by using the IE debug tools.

于 2012-07-31T21:07:16.730 回答