我使用以下代码进行 XSL 转换:
Source source = new StreamSource(new StringReader(request.toString()));
Source xsl = new StreamSource(XSLPath);
StringWriter destination = new StringWriter();
Result result = new StreamResult(destination);
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer;
transformer = transFactory.newTransformer(xsl);
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(source, result);
XSLPath
变量将文件位置传递给 .xsl
文件。
我需要知道 transFactory.newTransformer(xsl)
是否首先对 xsl 文件本身进行任何类型的内部验证。如果没有,那么有没有办法在执行转换之前对 xsl 文件进行验证?
我有一个代码来验证 xsd 文件,但是,我相信相同的代码不适用于 xsl。我仍然尝试过,但它总是抛出一些或其他关于大多数行不允许非空白的 SAXException
。
最佳答案
是的,XSLT 处理器所做的第一件事就是验证和编译样式表。 (为什么要问?只要引入一个错误,看看会发生什么!)
您可能会发现设置 ErrorListener 以确保您的应用程序可以捕获错误消息很有用。
如果您在多次转换中重复使用相同的样式表,则使用 newTemplates() 创建 Templates 对象会更有效,因此您只需执行一次验证/编译。将 Templates 对象视为已编译的样式表。
关于java - 转换时的 XSL 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16683780/