gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 02:21:35 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com