【问题标题】:XSL and JSP to show an HTML. Problems with &XSL 和 JSP 显示一个 HTML。 & 的问题
【发布时间】:2026-01-21 11:30:01
【问题描述】:

我正在使用 XSL 将 JSP 转换为 HTML。在转换时,我正在链接一个 CSS。 当请求中有一个字符 & 要显示在 input type="text"textarea 中时,如下所示,浏览器会显示一个空白页面。

如何在网页上显示该字符?

url 在 web.xml 中定义。

我的 JSP

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ page contentType="text/html; charset=ISO-8859-1"%>
<%@ page language="java" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>

<c:import var="xslt" url="${initParam.URL_XSLT}" charEncoding="ISO-8859-1"/>
<x:transform xslt="${xslt}">

<MyTag>
    <content>
        <div class="">
            <input type="text" name="aName" value="${requestScope.myString}"/>
            <textarea name="aComment">${requestScope.myString2}</textarea>
        </div>
    </content>
</MyTag>

我的 XSL

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" omit-xml-declaration="yes" encoding="ISO-8859-1" indent="yes" />
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
    <head>
       <link type="text/css" rel="stylesheet" href="http://general.css"/>
    ...
    </head>
    <xsl:element name="body">
         ...
         <xsl:copy-of select="MyTag/content/div"></xsl:copy-of>
         ...
    </xsl:element>
</html>

我尝试改变

<xsl:copy-of-select> 

<xsl:for-each select="//MyTag/content/*">
    <xsl:calltemplatename="node"/>
</xsl:for-each>

...


    <xsl:template name="node">
        <xsl:variable name="name" select="name()"/>
        <xsl:element name="{$name}">
            <xsl:copy-of select="@*" />
            <xsl:if test="child::*">
                <xsl:for-each select="current()/*">
                    <xsl:call-template name="node"/>
        </xsl:for-each>
            </xsl:if>
            <!-- first attempt -->
        <xsl:value-of select="translate(text(),'&','&amp;')" />
            <!-- second attempt -->
            <xsl:value-of select="concat('&lt;![CDATA[', text(),']]&gt;')" />
    </xsl:element>
    </xsl:template>

为了解决这个问题,我无法修改 JSP。只是可以修改XSL。

提前感谢。

【问题讨论】:

    标签: html jsp xslt escaping


    【解决方案1】:

    xsl:value-of 有一个属性disable-output-escaping 来禁用放大器的编码。

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

    【讨论】:

    • 我试过了,还是不行。在服务器控制台上,我收到此消息实体名称必须紧跟实体引用中的“&”。
    • XSLT 是在处理 JSP 的输出还是来自 XSLT 的输出在 textarea 标签之间?我不知道 requestScope.myString 和 .myString2 是什么。
    • XSLT 用于获取最终的 HTML。在转换期间,会进行 CSS 和其他更改。 requestScope.myString 和 requestScope.myString2 是使用 EL 从请求中获取的数据。
    • 最后我放弃了这个可能的解决方案。在发送 request.setAttribute 中的数据之前,我将在 servlet 中转义有问题的字符。