如何将 Saxon 的 DocumentInfo 序列化为字符串?
How do I serialize Saxon's DocumentInfo to a String?
如果使用原版 XML DOM,我可以将 Document
对象序列化为 Java 中的 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);
在该代码中,"node" 是一个 XdmNode;如果要使用 DocumentInfo,则可以调用构造函数
new XdmNode(documentInfo);
如果使用原版 XML DOM,我可以将 Document
对象序列化为 Java 中的 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);
在该代码中,"node" 是一个 XdmNode;如果要使用 DocumentInfo,则可以调用构造函数
new XdmNode(documentInfo);