繁体   English   中英

不允许使用“ [xX] [mM] [lL]”。 -在字符串中创建XSLT文件

[英]“[xX][mM][lL]” is not allowed. - creating XSLT file within String

我知道此论坛中有很多此类内容,但没有任何答案可以解决我的问题。

我有一个动态生成xslt文件的类(不要问为什么,我有很多要处理的Web服务响应,我发现XSLT是最快的处理方法,并且我不想为每个Web服务响应都创建xslt文件) 。

所以我正在使用字符串生成器在类XSLT writer中创建我的XSLT,我得到正确的输出

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wd="urn:com.workday/bsvc"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
    <xsl:output method="text" indent="yes"/>
    <xsl:variable name="singleQ">
        <xsl:text>'</xsl:text>
    </xsl:variable>
    <xsl:variable name="doubleQ">
        <xsl:text>''</xsl:text>
    </xsl:variable>
    <xsl:template match="/">
        <file>
            <xsl:for-each select="wd:Get_Frequencies_Response/wd:Response_Data/wd:Frequency">
                <xsl:text>{'</xsl:text>
                <xsl:value-of
                    select="replace(wd:Frequency_Data/wd:Annualization_Factor, $singleQ, $doubleQ)"/>
                <xsl:text>','</xsl:text>
                <xsl:value-of
                    select="replace(wd:Frequency_Data/wd:Frequency_Behavior_Reference, $singleQ, $doubleQ)"/>
                <xsl:text>','</xsl:text>
                <xsl:value-of
                    select="replace(wd:Frequency_Data/wd:Frequency_ID, $singleQ, $doubleQ)"/>
                <xsl:text>','</xsl:text>
                <xsl:value-of select="replace(wd:Frequency_Data/wd:Name, $singleQ, $doubleQ)"/>
                <xsl:text>','</xsl:text>
                <xsl:value-of
                    select="replace(wd:Frequency_Data/wd:Use_Weekly_Hours, $singleQ, $doubleQ)"/>
                <xsl:text>','</xsl:text>
                <xsl:value-of
                    select="replace(wd:Frequency_Data/wd:Used_in_Payroll_Interface, $singleQ, $doubleQ)"/>
                <xsl:text>'},</xsl:text>
            </xsl:for-each>
        </file>
    </xsl:template>
</xsl:stylesheet>

我知道这是正确的,因为我将其粘贴到Oxygen xml中并格式化了它,这就是我得到的。 (XSLT最初写在一行中,因此我用Oxygen对其进行了格式化,只是为了检查输出是否正常)。

然后,我使用这种方法来创建我的转换器:

    private Transformer createTransformer(XSLTWriter xslt) throws Exception {
    Transformer transformer = null;
    TransformerFactory tf = TransformerFactory.newInstance();
    Source s = new StreamSource(new StringReader(xslt.getXSLT()));
    transformer = tf.newTransformer(s);
    return transformer;
}

我在上面粘贴的XSLT出现错误:

    11:16:24,432 ERROR [stderr] (Get Frequencies) Error on line 1 column 1276
11:16:24,433 ERROR [stderr] (Get Frequencies)   SXXP0003: Error reported by XML parser: The processing instruction target matching
11:16:24,434 ERROR [stderr] (Get Frequencies)   "[xX][mM][lL]" is not allowed.
11:16:24,435 ERROR [stderr] (Get Frequencies) javax.xml.transform.TransformerConfigurationException: Failed to compile stylesheet. 1 error detected.
11:16:24,436 ERROR [stderr] (Get Frequencies)   at net.sf.saxon.PreparedStylesheet.prepare(PreparedStylesheet.java:140)
11:16:24,437 ERROR [stderr] (Get Frequencies)   at net.sf.saxon.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:135)
11:16:24,438 ERROR [stderr] (Get Frequencies)   at net.sf.saxon.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:86)
11:16:24,439 ERROR [stderr] (Get Frequencies)   at __redirected.__TransformerFactory.newTransformer(__TransformerFactory.java:132)
11:16:24,440 ERROR [stderr] (Get Frequencies)   at config.loader.ConfigLoader.createTransformer(ConfigLoader.java:235)
11:16:24,440 ERROR [stderr] (Get Frequencies)   at config.loader.ConfigLoader.run(ConfigLoader.java:102)
11:16:24,442 ERROR [stderr] (Get Frequencies)   at java.lang.Thread.run(Thread.java:748)

有人做过吗?

该错误消息使您可以清楚地看到,正在提供的源样式表中的位置1276处有格式为<?xml ....?>的处理指令(或XML声明)。 这是不允许的(如果它是XML声明,则必须在开头,如果是处理指令,则不能将其称为“ xml”)。

现在,您显示的输入不包含此内容,因此我们必须得出结论,您显示给我们的输入不是您正在实际处理的输入。

您显示的输入不包含xsl:stylesheet元素的结束标记的事实可能是一个线索。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM