【发布时间】:2022-01-20 09:59:36
【问题描述】:
我已经构建了一个使用 schematron 验证和 xml 的应用程序。
代码如下:
import net.sf.saxon.s9api.*;
import javax.xml.transform.stream.StreamSource;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class ValidateSchema {
public static void main(String[] args) {
try {
Processor processor = new Processor(false);
XsltCompiler compiler = processor.newXsltCompiler();
XsltExecutable xslt = compiler.compile(new StreamSource(
new File("target/example.xsl")
));
XsltTransformer transformer = xslt.load();
transformer.setSource(new StreamSource(new File("example.xml")));
XdmDestination chainResult = new XdmDestination();
transformer.setDestination(chainResult);
transformer.transform();
List<String> errorList = new ArrayList<>();
XdmNode rootnode = chainResult.getXdmNode();
for (XdmNode node : rootnode.children().iterator().next().children()) {
if(!"failed-assert".equals(node.getNodeName().getLocalName())) continue;
String res = node.children().iterator().next().getStringValue();
errorList.add(trim(res));
}
for (String s : errorList) {
System.out.println(s);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static String trim(String s) {
s = s.replaceAll("\n", "").replaceAll("\t", " ");
while (s.indexOf(" ") != -1) {
s = s.replaceAll(" ", " ");
}
return s.trim();
}
}
当我尝试运行应用程序时,它给了我错误:java.lang.NullPointerException 在 ValidateSchema.main(ValidateSchema.java:27) 也就是这行代码:
if(!"failed-assert".equals(node.getNodeName().getLocalName())) continue;
这是我第一次构建这样的东西,我想知道如何解决这个问题。提前致谢
【问题讨论】:
-
Schematron 验证的结果是 XML,这就是您将其作为 XML 处理的原因,不是吗?考虑再次使用 XSLT(或者可能只是 XPath)来输出消息。如果您需要帮助,请向我们展示示例结果和您要提取的示例消息。
标签: java xml maven saxon schematron