java - 如何将 xslt 生成的错误消息传递给 java 应用程序调用方

标签 java xml xslt

我使用 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/

相关文章:

java - 错误: Could not find or load main class openWordDocument

java - 使用java程序分析互联网速度

java - Javas KeyManagerFactory.init 如何处理多个 key

sql导入具有多个节点/子节点的xml文件

java - 将 Doctype 作为 XML 文档解析 XHTML 文件的性能很糟糕

XSLT错误: xmlParseEntityRef

java - GPS 坐标解析和渲染 - Java 库?

xml - XML Schema 中的嵌套选择元素?

xml - 通用 XSLT 1.0 从根节点获取不同的叶节点路径?

xslt - 选择具有默认命名空间的节点