我有这个样式表
<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中获取一个body,我使用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) at net.sf.saxon.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:132) at net.sf.saxon.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:87) at service.ResponseService.getRequestSoapBody(ResponseService.java:76)
那有什么不对?
答案 0 :(得分:1)
首先出现的问题是您没有显示编译器错误消息。 Saxon默认将消息发送到System.err,但是如果你在一个带有图形用户界面的应用程序中,你很可能永远不会看到那里写的是什么。因此,将消息重定向到其他位置。您可以使用System.setErr()将其定向到文件或GUI应用程序中的窗口;撒克逊级别还有控件将不同编辑的输出发送到不同的目的地。
您向我们展示的代码没有任何问题。
我怀疑(但这只是猜测)你的变量“xsl”包含样式表代码作为字符串,而它应该包含样式表位置的URI。