从String而不是文件解析XML的问题

时间:2011-04-14 11:26:41

标签: java android xml inputstream

我有一个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内容。然后将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;
        }

但这不起作用......

我确定String的内容。 我测试了StringToStream函数,它工作正常。

我还将日志放在XMLHandlerLevel中以检查发生了什么,并且没有调用函数startDocument()甚至没有被调用但是没有错误消息没有例外所以我完全不知道解释这个。

恢复: 当Stream来自context.getResources()时,我的XMLParser工作正常.openRawResource(id); 但是当它形成一个字符串时 为什么?

感谢您的任何想法

杰森

2 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:-1)

我不确定它会对你有所帮助但是有一个名为Jsoup.jar的外部jar文件将它添加到你的项目中,它有解析xml,html的API ...请参阅互联网上的教程.... / p>