Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 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 но это не вариант

есть какие-то идеи?!
PM WWW ICQ Skype   Вверх
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 

Приветствуются любые варианты решения проблемы, от перетаскивания пакета до собственного плохотестированого класса.
PM WWW ICQ Skype   Вверх
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();
    }


пакет com.sun.org.apache.xml.internal.serialize

Это сообщение отредактировал(а) CTAPbIuMABP - 9.9.2009, 00:21
PM WWW ICQ Skype   Вверх
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("<").append(root.getNodeName()).append(">");
            }else{
                result.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            }

            NodeList nodes = root.getChildNodes();
            for(int i=0,j=nodes.getLength();i<j;i++){
                Node node = nodes.item(i);
                result.append(getStringFromNode(node));
            }

            if (root.getNodeType() != 9){
                result.append("</").append(root.getNodeName()).append(">");
            }
        }
        return result.toString();
    }


появится javax.xml.transform можно будет переписать всего один метод ;)
PM WWW ICQ Skype   Вверх
W0LF
Дата 9.9.2009, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


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

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



сорри, но что этот трансформ делает конкретно? то что процессит дерево в аутпут результат не подходит в качестве ответа =)


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
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 надо превратить в стоку

Код

<?xml version="1.0" encoding="UTF-8"?>
<tag></tag>


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

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

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

Код

System.out.print(doc.toString());


выглядит примерно как [#document: null]
PM WWW ICQ Skype   Вверх
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 < root.getAttributes().getLength(); ++k) {
                    attrs.append(" ").append(
                            root.getAttributes().item(k).getNodeName()).append(
                            "=\"").append(
                            root.getAttributes().item(k).getNodeValue())
                            .append("\" ");
                }
                result.append("<").append(root.getNodeName()).append(" ")
                        .append(attrs).append(">");
            } else {
                result.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            }

            NodeList nodes = root.getChildNodes();
            for (int i = 0, j = nodes.getLength(); i < j; i++) {
                Node node = nodes.item(i);
                result.append(getStringFromNode(node));
            }

            if (root.getNodeType() != 9) {
                result.append("</").append(root.getNodeName()).append(">");
            }
        }
        return result.toString();
    }


ps еще есть и такой метод http://www.ibm.com/developerworks/opensour...dex.html#list11

Это сообщение отредактировал(а) hunterman - 28.1.2010, 15:19
PM MAIL   Вверх
ivanovpv
Дата 28.1.2010, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


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

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



Пора по-моему делать отдельную конфу под Андроид... А то вроде бы Java, относится к мобилам, но никак не катит J2ME


--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.