从字符串而不是文件解析XML时出现问题

问题描述

| 我有一个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();
    }
但是现在我也从服务器获取了一些内容。然后将XML作为字符串发送,这是它的阻止位置:
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()函数,但是我没有收到错误消息,也没有异常,因此我完全迷失了对此的解释。 恢复: 当Stream来自context.getResources()。openRawResource(id);时,我的XMLParser可以正常工作。 但是不是字符串形式的 为什么? 谢谢你的任何想法 杰森     

解决方法

您似乎没有在采用字符串的代码路径中设置内容处理程序。 为什么不将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();
    }
}
    ,我不确定它是否对您有帮助,但是有一个名为Jsoup.jar的外部jar文件将其添加到您的项目中,它具有解析xml,html的API ...请参阅Internet上的教程。