На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS RSS
>  Форум на Исходниках.RU
       Программирование
         Программирование мобильных устройств
           Android, iOS
msm.ru
Модераторы: Hsilgos
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )   Новое голосование

> Парсинг xml
mrco
Сообщ. #16, 28.03.12, 10:56
Profi
*****
Профиль · PM

Рейтинг (т): 51

В общем-то:
ExpandedWrap disabled
    InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(xml));
    doc = db.parse(is);

должно работать. без каких либо указаний кодировок, потому что на входе у вас String. А он бывает только в одной кодировке.
1. Проверьте что у вас в строке на входе в метод XMLfromString, если она битая, то дальше ничего уже не исправить.
2. У вас Response от сервера сначала перегоняеться в строку, а потом из строки в xml документ. Это лишние действия:
ExpandedWrap disabled
            final HttpResponse response = mHttpClient.execute(request);
        final InputStream in = response.getEntity().getContent();
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true); // never forget this!
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(in);

этот фрагмент гарантированно работает с UTf-8.
___________
Библиотека для протокола 9P2000 - V2StyxLib
muskos
Сообщ. #17, 28.03.12, 11:10

Member
**
Профиль · PM

Рейтинг (т): 1

Британский учёный
ExpandedWrap disabled
    public class XMLParser {
     
        public final static Document XMLfromString(String xml){
            
            Document doc = null;
            
            //DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            //DocumentBuilder builder = dbf.newDocumentBuilder();
            try {
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder = dbf.newDocumentBuilder();
                DocumentBuilder db = dbf.newDocumentBuilder();
                //StringReader sr = new StringReader(xml);
                //InputSource is = new InputSource(sr);
                //is.setCharacterStream(new StringReader(xml));
                //is.setEncoding("utf-8");
                ByteArrayInputStream encXML = new ByteArrayInputStream(xml.getBytes("UTF8"));
                doc = builder.parse(encXML);
                
            } catch (ParserConfigurationException e) {
                System.out.println("XML parse error: " + e.getMessage());
                return null;
            } catch (SAXException e) {
                System.out.println("Wrong XML file structure: " + e.getMessage());
                return null;
            } catch (IOException e) {
                System.out.println("I/O exeption: " + e.getMessage());
                return null;
            }
                  
            return doc;
            
        }


методом тыка испробовал много вариантов...всё равно кодировку не меняет(

Добавлено 28.03.12, 11:11
mrco знаний не хватает - проверить что в строке на входе(((

Добавлено 28.03.12, 11:45
mrco Я слегка не понимаю про Response... У меня всё тоже самое, кроме одной строчки, только раскидано между функциями...

ExpandedWrap disabled
    public class XMLParser {
     
        public final static Document XMLfromString(String xml){
            
            Document doc = null;
            
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            dbf.setNamespaceAware(true); // never forget this!
            try {
                
                DocumentBuilder db = dbf.newDocumentBuilder();
                
                InputSource is = new InputSource();
                is.setCharacterStream(new StringReader(xml));
                doc = db.parse(is);
                
            } catch (ParserConfigurationException e) {
                System.out.println("XML parse error: " + e.getMessage());
                return null;
            } catch (SAXException e) {
                System.out.println("Wrong XML file structure: " + e.getMessage());
                return null;
            } catch (IOException e) {
                System.out.println("I/O exeption: " + e.getMessage());
                return null;
            }
                  
            return doc;
            
        }
        
        /** Returns element value
          * @param elem element (it is XML tag)
          * @return Element value otherwise empty String
          */
         public final static String getElementValue( Node elem ) {
             Node kid;
             if( elem != null){
                 if (elem.hasChildNodes()){
                     for( kid = elem.getFirstChild(); kid != null; kid = kid.getNextSibling() ){
                         if( kid.getNodeType() == Node.TEXT_NODE  ){
                             return kid.getNodeValue();
                         }
                     }
                 }
             }
             return "";
         }
            
         public static String getXML(){  
                String line = null;
     
                try {
                    
                    DefaultHttpClient httpClient = new DefaultHttpClient();
                    HttpPost httpPost = new HttpPost("http://alfoot.net/newfile.xml");
     
                    HttpResponse httpResponse = httpClient.execute(httpPost);
                    InputStream in = httpResponse.getEntity().getContent();//
                    HttpEntity httpEntity = httpResponse.getEntity();
                    line = EntityUtils.toString(httpEntity);
                    
                } catch (UnsupportedEncodingException e) {
                    line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
                } catch (MalformedURLException e) {
                    line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
                } catch (IOException e) {
                    line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
                }
     
                return line;
     
        }
        // final HttpResponse response = mHttpClient.execute(request);
         //   final InputStream in = response.getEntity().getContent();
        
        public static int numResults(Document doc){    
            Node results = doc.getDocumentElement();
            int res = -1;
            
            try{
                res = Integer.valueOf(results.getAttributes().getNamedItem("count").getNodeValue());
            }catch(Exception e ){
                res = -1;
            }
            
            return res;
        }
     
        public static String getValue(Element item, String str) {      
            NodeList n = item.getElementsByTagName(str);        
            return XMLParser.getElementValue(n.item(0));
        }
    }
___________
Всё возможно! Google
Чем глубже, тем меньше! Google
muskos
Сообщ. #18, 28.03.12, 13:33

Member
**
Профиль · PM

Рейтинг (т): 1

Самое обидное...то, что уже столько получилось копипастом...и на одной фишке легло(((

Добавлено 28.03.12, 13:59
Это переменная doc
03-28 13:58:07.523: I/System.out(305): !: org.apache.harmony.xml.dom.DocumentImpl@44f69f88
Переменная line в месте где должны быть наши буковки русские...уже хранит абракадабру -
03-28 13:59:44.493: I/System.out(333): <name>Команда А - Команда Б</name>

mrco, вы имели в виду этот вход? Или есть ещё где?
___________
Всё возможно! Google
Чем глубже, тем меньше! Google
Британский учёный
Сообщ. #19, 28.03.12, 14:12
Unregistered

Цитата (muskos @ 28.03.12, 13:33)
Переменная line в месте где должны быть наши буковки русские...уже хранит абракадабру -

Тоесть ПЕРЕД парсингом уже фигня в строке? Тогда парсер не причёмю
muskos
Сообщ. #20, 28.03.12, 14:14

Member
**
Профиль · PM

Рейтинг (т): 1

На всякий случай покажу, где переменная line лежит...и в какой момент она что делает...

ExpandedWrap disabled
    public static String getXML(){  
                String line = null;
     
                try {
                    
                    DefaultHttpClient httpClient = new DefaultHttpClient();
                    HttpPost httpPost = new HttpPost("http://alfoot.net/newfile.xml");
     
                    HttpResponse httpResponse = httpClient.execute(httpPost);
                    HttpEntity httpEntity = httpResponse.getEntity();
                    line = EntityUtils.toString(httpEntity);
                    
                } catch (UnsupportedEncodingException e) {
                    line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
                } catch (MalformedURLException e) {
                    line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
                } catch (IOException e) {
                    line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
                }
     
                return line;
     
        }


Хорошо, тогда ЧТО ЖЕ ЭТО МОЖЕТ БЫТЬ((( У МЕНЯ УЖЕ ГОЛОВА КРУГОМ)))) :crazy:
___________
Всё возможно! Google
Чем глубже, тем меньше! Google
mrco
Сообщ. #21, 28.03.12, 15:04
Profi
*****
Профиль · PM

Рейтинг (т): 51

С сервера xml приходит в какой кодировке?
Если utf-8 то попробуйте line = EntityUtils.toString(httpEntity, "UTF-8");
___________
Библиотека для протокола 9P2000 - V2StyxLib
muskos
Сообщ. #22, 28.03.12, 16:25

Member
**
Профиль · PM

Рейтинг (т): 1

mrco Я ПРОСТО В ШОКЕ!!!!!!!!!! СПАСИБО БОЛЬШОЕ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
___________
Всё возможно! Google
Чем глубже, тем меньше! Google
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:

> Форум на Исходниках.RU · Программирование мобильных устройств · Android, iOS

Страницы: (2) 1 [2]  все Новое голосование


[ Script Execution time: 0,1195 ]   [ 16 queries used ]   [ Generated: 20.04.14, 00:38 GMT ]  

Rambler's Top100