我知道在这个论坛中有很多这些,但没有一个答案解决了我的问题。
我有一个动态生成xslt文件的类(不要问为什么,我有很多webservice响应处理,我发现XSLT是最快的方法,我不想为每一个创建xslt文件网络服务响应)。
所以我使用字符串构建器在类XSLT编写器中创建我的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)
有没有人这样做过?
答案 0 :(得分:0)
错误消息表明在您提供的源样式表中,位置1276处的表单<?xml ....?>
存在处理指令(或XML声明)。这是不允许的(如果它是一个XML声明,它必须在开始时,如果它是一个处理指令,那么它就不能被调用&#34; xml&#34;) 。
现在您显示的输入并不包含此内容,因此我们必须得出结论,您输入的输入并不是您实际处理的输入。
您所显示的输入不包含xsl:stylesheet
元素的结束标记这一事实可能是一个线索。