Проблемы при разборе XML из строки, но не из файла

1

У меня есть синтаксический анализатор xml, который отлично работает, когда я загружаю его из файла:

private void getParsedXML(int id, Context context) throws Exception {
        /* Get a SAXParser from the SAXPArserFactory. */
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();

        /* Get the XMLReader of the SAXParser we created. */
        XMLReader xr = sp.getXMLReader();
        /* Create a new ContentHandler and apply it to the XML-Reader */
        XMLHandlerLevel myExampleHandler = new XMLHandlerLevel();
        xr.setContentHandler(myExampleHandler);
        /* Load xml file from raw folder*/
        InputStream in = context.getResources().openRawResource(id); 

        /* Begin parsing */
        xr.parse(new InputSource(in));
        this.levelData = myExampleHandler.getLevelData();
        in.close();
    }

Но теперь я также получаю somme content из сервера. Затем XML отправляется как String, и здесь он блокируется:

private void getParsedXML(String s) throws Exception{
        if(this.levelData == null){
            InputStream in = StringToStream(s);
            /* Get a SAXParser from the SAXPArserFactory. */
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser sp = spf.newSAXParser();
            XMLHandlerLevel myExampleHandler = new XMLHandlerLevel();
            XMLReader xr = sp.getXMLReader();
            /* Begin parsing */
            xr.parse(new InputSource(in));



            this.levelData = myExampleHandler.getLevelData();
            Log.e("jason",(levelData!=null)?levelData.toString():null);
            in.close();
        }
    }

и вот функция StringToString

    public static InputStream StringToStream(String text) {
            InputStream is = null;
            /*
             * Convert String to InputStream using ByteArrayInputStream 
             * class. This class constructor takes the string byte array 
             * which can be done by calling the getBytes() method.
             */
            try {
                is = new ByteArrayInputStream(text.getBytes("UTF-8"));
                 is.reset();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (Exception e){
                Log.e("jason","failed again");
            }
            return is;
        }

Но это не сработает...

Я уверен в содержании строки. и я протестировал функцию StringToStream, она отлично работает.

Я также поместил журналы в XMLHandlerLevel, чтобы проверить, что происходит, и НИЧЕГО не запускать функцию startDocument(), но я не получаю сообщение об ошибке без исключений, поэтому я полностью потерял, чтобы объяснить это.

для возобновления: Мой XMLParser отлично работает, когда поток поступает из context.getResources(). openRawResource (id); но не тогда, когда он приходит из строки Почему?

Спасибо за любые идеи

Джейсон

  • 0
    Что вы имеете в виду, что это не работает? Выдается ли исключение?
  • 2
    У вас нет текста в InputStream, StringReader будет лучше. Но код вставки по сути тот же - должно быть что-то еще не так? В подобных случаях заставьте метод parse принимать исходный код xml таким образом, чтобы рабочий и нерабочий код разделяли некоторую логику, чтобы вы могли устранить общий код как проблему.
Показать ещё 3 комментария
Теги:
inputstream

2 ответа

4
Лучший ответ

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

Почему бы не обернуть String в StringReader и не проанализировать это?

InputSource is = new InputSource(new StringReader(string));
xr.parse(is);

Пример (изменен):

private void getParsedXML(String s) throws Exception{
    if(this.levelData == null){
        /* Get a SAXParser from the SAXPArserFactory. */
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        XMLHandlerLevel myExampleHandler = new XMLHandlerLevel();
        XMLReader xr = sp.getXMLReader();
        /* Begin parsing */
        InputSource is = new InputSource(new StringReader(string));
        xr.parse(is);

        this.levelData = myExampleHandler.getLevelData();
        Log.e("jason",(levelData!=null)?levelData.toString():null);
        in.close();
    }
}
  • 0
    Не повезло, но спасибо за совет StringReader.
-1

Я не уверен, что он поможет u, но есть внешний файл jar, который называется Jsoup.jar, добавьте его в свой проект, у него есть API для разбора xml, html... см. учебник по интернету....

Ещё вопросы

Сообщество Overcoder
Наверх
Меню