2015-12-16 2 views
1

При использовании ванильный XML DOM, я могу сериализовать Document объект в String в Java, как это:Как сериализовать Saxon's DocumentInfo в строку?

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(); 

Если я использую API S9, который является частью Saxon 9.7 HE, и у меня есть DocumentInfo объект, как могу ли я сериализовать его на String?


Редактировать: Вот полный рабочий пример, который основан на ответ @Michael Кей:

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); 

ответ

2

Ну, во-первых, 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);