捕获xsl:java中的消息输出
我试图在调用转换时用java捕获xsl:message。下面是我的代码片段捕获xsl:java中的消息输出,java,xslt,Java,Xslt,我试图在调用转换时用java捕获xsl:message。下面是我的代码片段 final ArrayList<TransformerException> errorList = new ArrayList<TransformerException>(); ErrorListener errorListener = new ErrorListener() { @Override public void w
final ArrayList<TransformerException> errorList = new ArrayList<TransformerException>();
ErrorListener errorListener = new ErrorListener() {
@Override
public void warning(TransformerException e) throws TransformerException {
//To change body of implemented methods use File | Settings | File Templates.
log.error(e.getMessage());
errorList.add(e);
}
@Override
public void error(TransformerException e) throws TransformerException {
//To change body of implemented methods use File | Settings | File Templates.
log.error(e.getMessage());
errorList.add(e);
}
@Override
public void fatalError(TransformerException e) throws TransformerException {
//To change body of implemented methods use File | Settings | File Templates.
errorList.add(e);
throw e;
}
};
...
try
{
transformer.setErrorListener(errorListener);
newDoc = transform(transformer, oldDoc);
}
catch (TransformerException e) {
log.error("Problem transforming normalized document into PUBS-XML", e);
throw e;
}
final ArrayList errorList=new ArrayList();
ErrorListener ErrorListener=新的ErrorListener(){
@凌驾
公共无效警告(TransformerException e)引发TransformerException{
//要更改已实现方法的主体,请使用文件|设置|文件模板。
log.error(例如getMessage());
错误列表。添加(e);
}
@凌驾
公共无效错误(TransformerException e)引发TransformerException{
//要更改已实现方法的主体,请使用文件|设置|文件模板。
log.error(例如getMessage());
错误列表。添加(e);
}
@凌驾
public void fatalError(TransformerException e)抛出TransformerException{
//要更改已实现方法的主体,请使用文件|设置|文件模板。
错误列表。添加(e);
投掷e;
}
};
...
尝试
{
transformer.setErrorListener(errorListener);
newDoc=变换(transformer,oldDoc);
}
捕获(转换异常e){
错误(“将规范化文档转换为PUBS-XML的问题”,e);
投掷e;
}
不幸的是,这不起作用
有更好的办法吗
提前谢谢 如果您使用的是Saxon,则可能需要
public void setMessageEmitter(Receiver-Receiver)
设置用于xsl:message输出的接收器
JAXP接口的最新版本指定默认情况下
xsl:message
的输出被发送到
注册错误侦听器撒克逊人会
不执行此约定。
相反,输出被发送到
默认消息发射器,它是
略为定制的
标准撒克逊发射器接口
此接口可用于更改Saxon输出的方式
xsl:message
输出
:
ErrorListener
是一个
很晚才介绍给JAXP
阶段(许多令人遗憾的事件之一)
规格变更的场合
单方面匹配Xalan
)和我决定不这样做
默认情况下实现此更改
行为,因为它本来是
中断现有应用程序
在Saxon中,xsl:message
输出是
指向一个接收器,你可以
向变压器提名:
((net.sf.saxon.Controller)transformer).setMessageEmitter(..)
如果您想遵循JAXP模型
将输出发送到
ErrorListener,您可以指定一个
执行此操作的接收器:
((net.sf.saxon.Controller)transformer).setMessageEmitter(新)
net.sf.saxon.event.MessageWarner())
您使用的是哪个xslt处理器?相信我使用的是带有javax.xml.transform.*的Xalan。我的样式表是版本2.0。处理器是萨克森。下面的答案是捕获xsl的解决方案:message output.net.sf.saxon.event.MessageWarner是saxon的旧版本(9.3及更早版本?)和saxon CE(基于9.3代码库)的合适类。在较新版本的saxon中,它是net.sf.saxon.serialize.MessageWarner。请注意,这会将消息发送到ErrorListener的warning()方法,除非terminate=“yes”,在这种情况下,它会将消息发送到error()方法。如果有人感兴趣:我在这里为Saxon的TransformerFactory制作了一个包装器: