作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我使用 java 应用程序调用 xslt 来执行 xml 转换。如果某些情况发生,xslt 文件将生成一条消息并终止进程。但是,我的 Java 应用程序无法捕获 xslt 生成的错误消息,它只能捕获带有一般信息的异常 - “样式表定向终止”。
这是我的java代码:
SAXTransformerFactory saxTFactory = ((SAXTransformerFactory) tFactory);
// Create a TransformerHandler for stylesheet.
File f2 = new File(styleSheetPath);
TransformerHandler tHandler2 = saxTFactory.newTransformerHandler(new StreamSource(f2));
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(tHandler2);
reader.setProperty("http://xml.org/sax/properties/lexical-handler", tHandler2);
CharArrayWriter outputWriter = new CharArrayWriter();
Result result = new StreamResult(outputWriter);
tHandler2.setResult(result);
try
{
reader.parse(new InputSource(new StringReader(XMLinput)));
}
catch(Exception ee)
{
dsiplay(ee.getMessage())
throw ee;
}
如何捕获来自 xslt 的错误消息?
我试着写了一个类:
私有(private)类 MyErrorHandler 扩展了 DefaultHandler{
public void error(SAXParseException e)
{
System.out.println("error method "+e.getMessage());
}
public void fatalError(SAXParseException e)
{
System.out.println("fatal error method "+e.getMessage());
}
public void warning(SAXParseException e)
{
System.out.println("warning method "+e.getMessage());
}
和
MyErrorHandler myHandler = new MyErrorHandler();
reader.setErrorHandler(myHandler);
没用。
你有什么建议吗?
最佳答案
看起来好像您在源文档 XML 解析器上放置了一个错误处理程序,但正试图从转换器中捕获错误。因此,将错误处理程序放在 Transformer
而不是 XMLReader
tHandler2.getTransformer().setErrorListener(myHandler);
IIRC,我一直保持简单并直接使用 Transformer
而不是使用 ContentHandler
/TranformerHandler
。
作为替代方案,您可以寻求特定于实现的扩展或导致解析并处理特殊的 URI(尽管 XSLT 是一种函数式语言,我猜它可以在技术上解析不会实际影响结果的 URI)。
关于java - 如何将 xslt 生成的错误消息传递给 java 应用程序调用方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/562241/
我是一名优秀的程序员,十分优秀!