如果使用原始XML DOM,我可以像这样将Java中的Document对象序列化为String:

    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    StringWriter stringWriter = new StringWriter();
    transformer.transform(new DOMSource(document), new StreamResult(stringWriter));
    String result = stringWriter.getBuffer().toString();

如果我使用的是Saxon 9.7 HE的一部分的S9 API,并且有DocumentInfo对象,如何将其序列化为String

编辑:这是一个完整的工作示例,该示例基于@Michael Kay的答案:
    Processor processor = new Processor(false); // False = does not required a feature from a licensed version of Saxon.
    Serializer serializer = processor.newSerializer();
    // Other properties found here: http://www.saxonica.com/html/documentation/javadoc/net/sf/saxon/s9api/Serializer.Property.html
    serializer.setOutputProperty(Serializer.Property.OMIT_XML_DECLARATION, "no");
    serializer.setOutputProperty(Serializer.Property.INDENT, "yes");
    XdmNode xdmNode = new XdmNode(documentInfo);
    String result = serializer.serializeNodeToString(xdmNode);

最佳答案

好吧,首先,DocumentInfo实际上不是s9api API的一部分:在s9api中,节点由XdmNode对象表示。

序列化DocumentInfo的一种方法是完全使用向我们展示的代码:NodeInfo扩展了Source,因此可以将其用作transform()的第一个参数。

但是在s9api中,最简单的方法是:

Processor proc = new Processor();
Serializer ser = proc.newSerializer();
ser.setOutputProperty(....);
ser.serializeNode(node);

在该代码中,“节点”是XdmNode;如果要使用DocumentInfo,则可以调用构造函数
new XdmNode(documentInfo);

关于java - 如何将Saxon的DocumentInfo序列化为字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34312234/

10-10 11:57