Как понять этот код Java, который производит вывод DOM? - PullRequest
0 голосов
/ 03 ноября 2018

Имея в качестве входного файла XML-файл, я проанализировал его и изменил с помощью базовых функций, таких как удаление узла, добавление одного и т. Д. Я хотел вывести итоговый документ в виде дерева DOM. Я нашел этот код, но изо всех сил пытался понять, что делает каждая строка (даже при чтении документа для каждой функции).

Не могли бы вы проиллюстрировать на примере, как это работает?

  private static void toString(Document newDoc) throws Exception{
        DOMSource domSource = new DOMSource(newDoc);
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        StringWriter sw = new StringWriter();
        StreamResult sr = new StreamResult(sw);
        transformer.transform(domSource, sr);
        System.out.println(sw.toString());  
      }

выход

1 Ответ

0 голосов
/ 04 ноября 2018

A javax.xml.transform.Transformer преобразует (как следует из названия) javax.xml.transform.Source в javax.xml.transform.Result, возможно применяя таблицу стилей XSL в процессе. Строки исходного кода вокруг преобразователя:

Transformer transformer = TransformerFactory.newInstance().newTransformer(); // line 3
transformer.transform(domSource, sr); // line 6

Теперь, каков источник в вашем примере кода? Его

...Document newDoc... // line 1
DOMSource domSource = new DOMSource(newDoc); // line 2

означает: javax.xml.transform.Source реализация, которая читает org.w3c.dom.Document.

javax.xml.transform.Result:

StringWriter sw = new StringWriter(); // line 4
StreamResult sr = new StreamResult(sw); // line 5

означает, что это javax.xml.transform.stream.StreamResult (состоящий из потока символов или байтов), который записывает в java.io.StringWriter.

В итоге результат, записанный в java.io.StringWriter, выводится на консоль:

System.out.println(sw.toString()); // line 7
...