XSL,编译javax.xml.transform.TransformerException时出现问题:

时间:2016-09-29 10:54:11

标签: java xslt

所有。我有一个非常大的问题,我想要求提供信息,请。我有一个java项目,这个项目的功能之一,是必须解析一些xls。好吧,我在解析一个时遇到了问题。这是解析xsls的循环:

while(itera.hasNext()){
        // Creacion del transformador de SAX
            tFactory.setErrorListener(new ManejadorXSLTErrores());
            String nombrePlantilla = (String)itera.next();
            //creamos el objeto transformer
            String stream = (String)plantillas.get(nombrePlantilla);
            if((stream!= null) && (getClass()!=null) && (getClass().getResourceAsStream(stream)!=null))
                reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(stream)));
            else
                throw new ExceptionErrorARQSD(ConstantesErrorSD.ERROR_XML_TRANSFORMACION,new String[]{"Error al obtener el StreamSource: "+stream},null);
            transformer = tFactory.newTemplates(new StreamSource(reader)); 
            //se guardan en un contenedor
            contenedortransformers.putElemento(nombrePlantilla,transformer);
        }

这是我的Excel的xsd的一部分:

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

                <xsl:param name="servicio">
                    <xsl:value-of select="normalize-space(/SD/MENSAJECM/contenedorPeticionDatosComunes/codigoServicio)"/>
                </xsl:param>
        <xsl:template match="/">
                <xsl:apply-templates/>
            </xsl:template>


            <xsl:template match="SD">
                <xsl:apply-templates/>
            </xsl:template>



            <xsl:template match="MENSAJECM">
                <xsl:if test="$servicio = 'NSPLA001'">
                    <xsl:element name="MensajeSolicitud">
                        <xsl:apply-templates/>
                    </xsl:element>
                </xsl:if>
                <xsl:if test="$servicio = 'NSPLA002'">
                    <xsl:apply-templates/>
                </xsl:if>
            </xsl:template>

    <xsl:template match="contenedorPeticionDatosComunes">
            <xsl:if test="$servicio = 'NSPLA001'">
                <xsl:param name="fecha"><xsl:value-of select="normalize-space(./fecha)"/></xsl:param>
                <xsl:param name="hora"><xsl:value-of select="normalize-space(./hora)"/></xsl:param>
                <!-- Cod. Entidad U.O.R. (csbc) -->
                <xsl:attribute name="csbc">
                    <xsl:value-of select="substring(./unidadOrganizativaResponsable,1,4)"/>
                </xsl:attribute>

                <xsl:attribute name="fecha_envio">
                    <xsl:value-of select="$fecha"/>
                </xsl:attribute>

                <xsl:attribute name="oficina">
                    <xsl:value-of select="substring(./unidadOrganizativaResponsable,5,4)"/>
                </xsl:attribute>

                <xsl:attribute name="terminal">
                    <xsl:value-of select="substring(./unidadOrganizativaResponsable,11,2)"/>
                </xsl:attribute>

                <xsl:attribute name="usuario">
                    <xsl:value-of select="./usuario"/>
                </xsl:attribute>

                <xsl:attribute name="version">
                    <xsl:value-of select="1.0"/>
                </xsl:attribute>
            </xsl:if>
        </xsl:template>
</xsl:stylesheet>

这是我收到的例外情况:

javax.xml.transform.TransformerConfigurationException: javax.xml.transform.TransformerException: org.xml.sax.SAXException: ¡xsl:param no está permitido en esta posición de la hoja de estilos!
javax.xml.transform.TransformerException: ¡xsl:param no está permitido en esta posición de la hoja de estilos!

任何人都可以帮助我???感谢

2 个答案:

答案 0 :(得分:1)

这是为了让它与if在那里一起使用你应该使用试试这个:

{{1}}

答案 1 :(得分:0)

特别感谢Rob的帮助,xls表现不佳:

<xsl:template match="contenedorPeticionDatosComunes">
        <!-- <xsl:if test="$servicio = 'NSPLA001'"> -->
            <xsl:param name="fecha"><xsl:value-of select="normalize-space(./fecha)"/></xsl:param> 
            <xsl:param name="hora"><xsl:value-of select="normalize-space(./hora)"/></xsl:param>
            <!-- Cod. Entidad U.O.R. (csbc) -->
            <xsl:attribute name="csbc">
                <xsl:value-of select="substring(./unidadOrganizativaResponsable,1,4)"/>
            </xsl:attribute>
            <!-- Fecha Envío -->
            <xsl:attribute name="fecha_envio">
                <xsl:value-of select="$fecha"/>
            </xsl:attribute>
            <!-- Cod. Oficina U.O.R. -->
            <xsl:attribute name="oficina">
                <xsl:value-of select="substring(./unidadOrganizativaResponsable,5,4)"/>
            </xsl:attribute>
            <!-- Cod. Terminal U.O.R. -->
            <xsl:attribute name="terminal">
                <xsl:value-of select="substring(./unidadOrganizativaResponsable,11,2)"/>
            </xsl:attribute>
            <!-- Id Usuario -->
            <xsl:attribute name="usuario">
                <xsl:value-of select="./usuario"/>
            </xsl:attribute>
            <!-- Version -->
            <xsl:attribute name="version">
                <xsl:value-of select="1.0"/>
            </xsl:attribute>
        <!-- </xsl:if> -->
    </xsl:template>

如果我这样评论,现在,我在解析xsls时不会收到循环中的任何错误。