Xml xslt:messageinsaxon-消息在哪里?

Xml xslt:messageinsaxon-消息在哪里?,xml,xslt,message,saxon,Xml,Xslt,Message,Saxon,我使用Saxon XSLT 9.6.0.1版。样式表包含以下代码: ... <xsl:message terminate="yes">errormessage</xsl:message> ... 现在我想知道“errormessage”文本到底去了哪里。我可以在stderr上看到它,但需要向用户显示它或将其放入日志文件中 如何以编程方式访问消息文本?如果使用Saxons9api,则可以在Saxon参考资料(位于)中看到示例文件S9APIExamples,它有一个示例设置

我使用Saxon XSLT 9.6.0.1版。样式表包含以下代码:

...
<xsl:message terminate="yes">errormessage</xsl:message>
...
现在我想知道“errormessage”文本到底去了哪里。我可以在stderr上看到它,但需要向用户显示它或将其放入日志文件中


如何以编程方式访问消息文本?

如果使用Saxon
s9api
,则可以在Saxon参考资料(位于)中看到示例文件
S9APIExamples
,它有一个示例设置
MessageListener

        Processor proc = new Processor(false);
        XsltCompiler comp = proc.newXsltCompiler();
        String stylesheet =
                "<xsl:transform version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>\n" +
                        "  <xsl:template name='main'>\n" +
                        "    <xsl:message><msg>Reading http://www.w3.org/TR/xslt20/ ...</msg></xsl:message>/>\n" +
                        "    <exists>\n" +
                        "      <xsl:value-of select=\"doc-available('http://www.w3.org/TR/xslt20/')\"/>\n" +
                        "    </exists>\n" +
                        "    <xsl:message><msg>finishing</msg></xsl:message>\n" +
                        "  </xsl:template>\n" +
                        "</xsl:transform>";
        StringReader reader = new StringReader(stylesheet);
        StreamSource styleSource = new StreamSource(reader, "http://localhost/string");
        XsltExecutable templates = comp.compile(styleSource);
        XsltTransformer transformer = templates.load();
        transformer.setInitialTemplate(new QName("main"));
        transformer.setMessageListener(
                new MessageListener() {
                    public void message(XdmNode content, boolean terminate, SourceLocator locator) {
                        System.err.println("MESSAGE terminate=" + (terminate ? "yes" : "no") + " at " + new Date());
                        System.err.println("From instruction at line " + locator.getLineNumber() +
                                " of " + locator.getSystemId());
                        System.err.println(">>" + content.getStringValue());
                    }
                }
        );
        Serializer out = proc.newSerializer(System.out);
        transformer.setDestination(out);
        transformer.transform();
Processor proc=新处理器(false);
XsltCompiler comp=proc.newXsltCompiler();
字符串样式表=
“\n”+
“\n”+
“阅读http://www.w3.org/TR/xslt20/ …/>\n“+
“\n”+
“\n”+
“\n”+
“正在完成\n”+
“\n”+
"";
StringReader=新的StringReader(样式表);
StreamSource styleSource=新的StreamSource(读卡器,“http://localhost/string");
XsltExecutable templates=comp.compile(styleSource);
XsltTransformer transformer=templates.load();
transformer.setInitialTemplate(新的QName(“main”));
transformer.setMessageListener(
新建MessageListener(){
公共无效消息(XdmNode内容、布尔终止、SourceLocator定位器){
System.err.println(“MESSAGE terminate=”+(terminate?“yes”:“no”)+“在”+新日期();
System.err.println(“来自第行的指令”+locator.getLineNumber()+
“+locator.getSystemId())”的“;
System.err.println(“>>”+content.getStringValue());
}
}
);
Serializer out=进程新闻序列化程序(System.out);
设置目的地(输出);
transformer.transform();

您在Saxon 9.6中使用的是哪种API、JAXP API还是s9api?显然,我正在使用JAXP API,而我已经有了一段代码来检查Saxon TransformerImpl、强制转换类并设置MessageEmitter。如下所述,有一个MessageListener。MessageEmitter和MessageListener之间的区别是什么?是否可以使用JAXP API设置MessageListener?有关使用JAXP的解决方案,请参阅。
        Processor proc = new Processor(false);
        XsltCompiler comp = proc.newXsltCompiler();
        String stylesheet =
                "<xsl:transform version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>\n" +
                        "  <xsl:template name='main'>\n" +
                        "    <xsl:message><msg>Reading http://www.w3.org/TR/xslt20/ ...</msg></xsl:message>/>\n" +
                        "    <exists>\n" +
                        "      <xsl:value-of select=\"doc-available('http://www.w3.org/TR/xslt20/')\"/>\n" +
                        "    </exists>\n" +
                        "    <xsl:message><msg>finishing</msg></xsl:message>\n" +
                        "  </xsl:template>\n" +
                        "</xsl:transform>";
        StringReader reader = new StringReader(stylesheet);
        StreamSource styleSource = new StreamSource(reader, "http://localhost/string");
        XsltExecutable templates = comp.compile(styleSource);
        XsltTransformer transformer = templates.load();
        transformer.setInitialTemplate(new QName("main"));
        transformer.setMessageListener(
                new MessageListener() {
                    public void message(XdmNode content, boolean terminate, SourceLocator locator) {
                        System.err.println("MESSAGE terminate=" + (terminate ? "yes" : "no") + " at " + new Date());
                        System.err.println("From instruction at line " + locator.getLineNumber() +
                                " of " + locator.getSystemId());
                        System.err.println(">>" + content.getStringValue());
                    }
                }
        );
        Serializer out = proc.newSerializer(System.out);
        transformer.setDestination(out);
        transformer.transform();