0

我有这个样式表

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                xmlns:tes="http://testwork/">
    <xsl:template match="/">
        <xsl:apply-templates select="soapenv:Envelope/soapenv:Body/*"/>
    </xsl:template>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

和这个 xml 文件

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tes="http://testwork/">
   <soapenv:Header/>
   <soapenv:Body>
      <tes:sayHelloWorldFrom>
         <!--Optional:-->
         <arg0>?</arg0>
      </tes:sayHelloWorldFrom>
   </soapenv:Body>
</soapenv:Envelope>

我想用这个 xsl 从这个 xml 中得到一个主体,我使用 Saxon 进行转换,这是我的一段代码

public void get(String xml, String xsl) throws ServiceException {
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(new StreamSource(xsl));           
transformer.transform(new StreamSource(xml), new StreamResult(System.out));

但是在执行该方法期间我有一个错误

javax.xml.transform.TransformerConfigurationException:编译样式表失败。检测到 1 个错误。在 net.sf.saxon.PreparedStylesheet.prepare(PreparedStylesheet.java:220) 在 net.sf.saxon.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:132) 在 net.sf.saxon.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:87) ) 在 service.ResponseService.getRequestSoapBody(ResponseService.java:76)

那么有什么问题呢?

4

1 回答 1

1

错误的第一件事是您没有显示编译器错误消息。默认情况下,Saxon 将消息发送到 System.err,但如果您在具有图形用户界面的应用程序中,您很有可能永远看不到那里写的内容。所以将消息重定向到其他地方。您可以使用 System.setErr() 将其定向到文件或 GUI 应用程序中的窗口;Saxon 级别的控件也可以将不同编译的输出发送到不同的目的地。

您向我们展示的代码没有任何问题。

我怀疑(但这只是猜测)您的变量“xsl”包含作为字符串的样式表代码,而它应该包含样式表位置的 URI。

于 2013-10-12T15:48:57.937 回答