Преобразование документа в StreamSource - PullRequest
1 голос
/ 18 января 2011

Для преобразования XSLT мне нужен объект javax.xml.transform.stream.StreamSource , представляющий преобразуемый файл XML. У меня есть только объект типа org.w3c.dom.Document . Как преобразовать документ в StreamSource?

Ответы [ 3 ]

8 голосов
/ 18 января 2011

Я нашел решение на этой веб-странице .Существует класс DOMSource , который принимает объект Document в качестве параметра конструктора.

/**
 * Convert document to string for display
 * @param doc org.w3c.dom.Document
 * @return String
 */
private String documentToString(org.w3c.dom.Document doc) throws TransformerException {

    // Create dom source for the document
    DOMSource domSource=new DOMSource(doc);

    // Create a string writer
    StringWriter stringWriter=new StringWriter();

    // Create the result stream for the transform
    StreamResult result = new StreamResult(stringWriter);

    // Create a Transformer to serialize the document
    TransformerFactory tFactory =TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer();
    transformer.setOutputProperty("indent","yes");

    // Transform the document to the result stream
    transformer.transform(domSource, result);        
    return stringWriter.toString();
}
1 голос
/ 18 января 2011

В этом контексте вам необходимо преобразовать Document обратно в некоторый поток (символьный или байтовый), чтобы он обрабатывался как StreamSource.

Если документ небольшого размера, самый простой способ - просто преобразовать его в строку, создать для него StringReader и передать это средство чтения в конструктор StreamSource. Если документ больше (или имеет неизвестный размер), так что для его сериализации может потребоваться слишком много памяти, вам потребуется создать конвейерных считывателей и писателей , чтобы достичь то же самое (что является болью из-за необходимости управлять потоками, но это неизбежно, если временно отсутствует дамп всего документа).

Альтернативный подход может заключаться в том, чтобы взглянуть, откуда взялся Document. В любом случае, есть разумный шанс, что он поступит в ваше приложение как своего рода поток. может проще взглянуть на этот шаг в логике и снова получить необработанный поток документа для передачи в StreamSource, а не для повторной инициализации документа.

0 голосов
/ 18 января 2011

Действует как держатель для источника преобразования в виде потока разметки XML.

Streamsource упаковывает поток токенов xml.Так что вам просто нужно сериализовать документ в XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...