Android document to string

Как преобразовать строку в XML Document. Создаем String из Document

В этой статье мы познакомимся с простым способом преобразования строки в объект XML Document и обратной конвертации XML Document в строку. А также разберем зачем это нужно.

Из String в XML Document и наоборот

Программируя на Java часто приходится иметь дело со строками, которые содержат в себе XML разметку. Такие объекты нужно как-то обрабатывать. Для этого нам нужно преобразовать (конвертировать) такую строку c XML в объект Document ( org.w3c.dom.Document ). Похожая задача конвертации стоит во время отладки, когда нам потребуется преобразовать XML Document в объект String.

В этой статье мы разбирались как сделать красивый и читабельный вывод неотформатированной строки с XML разметкой. В этой статье нас больше интересует правильный способ преобразования между String и объектом Document.

Конвертация в String из XML Document и наоборот на примере

Напишем 2 метода для конвертации и обратного преобразования XML и String:

  • Метод stringToDocument(String xmlString) принимает на вход строку из XML разметкой, а затем парсит ее и возвращает в виде Document DOM. Мы будем использовать InputSource и StringReader для этого.
  • Метод documentToString(Document document) принимает на вход Document и преобразовывает его в объект String. Для этого используются классы Transformer , StringWriter и StreamResult пакета javax.xml.transform .

Напишем класс DocumentToStringConverter и реализуем этим методы:

Источник

Android document to string

CTAPbIuMABP
Дата 8.9.2009, 23:06 (ссылка) | (нет голосов) Загрузка .

Шустрый

Профиль
Группа: Участник
Сообщений: 92
Регистрация: 17.2.2006
Где: Киев

Репутация: нет
Всего: 1

Как оказалось из android sdk выкинули пакет javax.xml.transform и теперь преобразовать Node в String нормальным способом нельзя.

под нормальным способом я подразумеваю нечто вроде

Код
public static String getStringFromNode(Node node) throws TransformerException <
StringWriter writer = new StringWriter();
TransformerFactory.newInstance().newTransformer().transform(new DOMSource(node), new StreamResult(writer));
return writer.toString();
>

попытка перетачить пакет javax.xml.transform к себе в приложение вызвала недовольство со стороны компилятора

гугл предлагает использовать StringBuilder но это не вариант

есть какие-то идеи?!

Читайте также:  Только модем для android
CTAPbIuMABP
Дата 8.9.2009, 23:25 (ссылка) | (нет голосов) Загрузка .

Шустрый

Профиль
Группа: Участник
Сообщений: 92
Регистрация: 17.2.2006
Где: Киев

Репутация: нет
Всего: 1

вот ошибка которая вылазит когда переносишь пакет к себе

Код
Information:Compilation completed with 12 errors and 0 warnings
Information:12 errors
Information:0 warnings
Error:trouble processing «javax/xml/transform/dom/DOMSource.class»:
Error:Attempt to include a core VM class in something other than a core library.
Error:It is likely that you have attempted to include the core library from a desktop
Error:virtual machine into an application, which will most assuredly not work. If
Error:you really intend to build a core library — which is only appropriate as
Error:part of creating a full virtual machine binary, as opposed to compiling an
Error:application — then use the «—core-library» option to suppress this error
Error:message. If you go ahead and use «—core-library» but are in fact building
Error:an application, then please be aware that your build will still fail at some
Error:point; you will simply be denied the pleasure of reading this helpful error
Error:message.
Error:1 error; aborting

заодно выискалось решение с XmlSerializer но оно ИМХО мало чем отличается от StringBuilder

Приветствуются любые варианты решения проблемы, от перетаскивания пакета до собственного плохотестированого класса.

CTAPbIuMABP
Дата 9.9.2009, 00:21 (ссылка) | (нет голосов) Загрузка .

Шустрый

Профиль
Группа: Участник
Сообщений: 92
Регистрация: 17.2.2006
Где: Киев

Репутация: нет
Всего: 1

буду тут коллекционировать неработающие методы

Код
public static String getStringFromNode(Document doc) throws IOException <
OutputFormat format = new OutputFormat (doc);
StringWriter stringOut = new StringWriter ();
XMLSerializer serial = new XMLSerializer (stringOut, format);
serial.serialize(doc);
return stringOut.toString();
>

Это сообщение отредактировал(а) CTAPbIuMABP — 9.9.2009, 00:21

CTAPbIuMABP
Дата 9.9.2009, 01:28 (ссылка) | (голосов:1) Загрузка .

Шустрый

Профиль
Группа: Участник
Сообщений: 92
Регистрация: 17.2.2006
Где: Киев

Репутация: нет
Всего: 1

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

Код
public static String getStringFromNode(Node root) throws IOException <

StringBuilder result = new StringBuilder();

if(root.getNodeType() == 3)
result.append(root.getNodeValue());
else <
if (root.getNodeType() != 9) <
result.append(» «);
>else <
result.append(» «);
>

NodeList nodes = root.getChildNodes();
for(int i=0,j=nodes.getLength();i «);
>
>
return result.toString();
>

появится javax.xml.transform можно будет переписать всего один метод 😉

W0LF
Дата 9.9.2009, 02:02 (ссылка) | (нет голосов) Загрузка .

alexander lonsky

Профиль
Группа: Комодератор
Сообщений: 1165
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20

CTAPbIuMABP
Дата 9.9.2009, 09:55 (ссылка) | (нет голосов) Загрузка .

Шустрый

Профиль
Группа: Участник
Сообщений: 92
Регистрация: 17.2.2006
Где: Киев

Репутация: нет
Всего: 1

я ж вчера вроде не пил, мысль излагал ровно.

есть дом дерево созданое вот таким образом

Код
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.newDocument();
Element elt = doc.createElement(«tag»);
doc.appendChild(elt);

в результату этот объект Document надо превратить в стоку

для этого в J2EE есть пакет javax.xml.transform , который работает способом показаным в первом посте

в Android SDK этого пакета нет.

а то что процесит дерево в аутпут типа

Код
System.out.print(doc.toString());

выглядит примерно как [#document: null]

hunterman
Дата 28.1.2010, 15:09 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 36
Регистрация: 3.12.2008
Где: Херсон

Репутация: нет
Всего: нет

подыму эту тему выше с уточнением что атрибуты у нодов не идут в исходящую строку, вот дописал, т.к. пишу под sdk 1.5 и там данная проблема еще актуальна то может кому то еще понадобиться.

Код
public static String getStringFromNode(Node root) throws IOException <

StringBuilder result = new StringBuilder();

if (root.getNodeType() == 3)
result.append(root.getNodeValue());
else <
if (root.getNodeType() != 9) <
StringBuffer attrs = new StringBuffer();
for (int k = 0; k «);
> else <
result.append(» «);
>

NodeList nodes = root.getChildNodes();
for (int i = 0, j = nodes.getLength(); i «);
>
>
return result.toString();
>

Это сообщение отредактировал(а) hunterman — 28.1.2010, 15:19

ivanovpv
Дата 28.1.2010, 18:41 (ссылка) | (нет голосов) Загрузка .

Варвар

Профиль
Группа: Участник
Сообщений: 639
Регистрация: 26.1.2005
Где: Москва

Репутация: 10
Всего: 28

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс «транслит» (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
    FAQ раздела лежит здесь!

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »

[ Время генерации скрипта: 0.1370 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Источник

Читайте также:  Антивирус для android с ключом
Оцените статью