在Android的解析CDATA [英] Parsing CDATA in android

查看:129
本文介绍了在Android的解析CDATA的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我解析XML这是我读它,分析它在服务器上没有任何错误,但我无法看到的数据。

下面是我的XML:

<$p$p><$c$c><BookData><book><Title><![CDATA[ABC]]></Title><AuthorFName1><![CDATA[A]]></AuthorFName1><AuthorLName1><![CDATA[B]]></AuthorLName1></book><book><Title><![CDATA[XYZ]]></Title><AuthorFName1><![CDATA[A]]></AuthorFName1><AuthorLName1><![CDATA[B]]></AuthorLName1></book>

我用的DocumentBuilderFactory 看连我设置code

  dbf.setCoalescing(真正的);
 

但仍无法正常工作,请参见$ C $下的DocumentBuilderFactory

 文档DOC = NULL;
DocumentBuilderFactory的DBF = DocumentBuilderFactory.newInstance();
dbf.setCoalescing(真正的);
尝试 {
    DocumentBuilder的DB = dbf.newDocumentBuilder();
    InputSource的是=新的InputSource();
    is.setCharacterStream(新StringReader(XML));
    DOC = db.parse(是);
}赶上(的ParserConfigurationException E){
    Log.d(XML解析错误:e.getMessage());
    返回null;
}赶上(的SAXException E){
    Log.d(错误的XML文件结构,e.getMessage());
    返回null;
}赶上(IOException异常E){
    Log.d(IOException异常,e.getMessage());
    返回null;
}
 

解决方案

试试这个,你只需要传递的InputSource实例,这种方法和它的作品。

 私人无效的DOMParser(的InputSource的InputSource){

        DocumentBuilderFactory的dBuilderFactory = DocumentBuilderFactory.newInstance();
        尝试 {
            的DocumentBuilder的DocumentBuilder = dBuilderFactory.newDocumentBuilder();
            文档DOM = documentBuilder.parse(InputSource的);

            //获取根元素.....
            元件docElement = dom.getDocumentElement();
            Log.i(根元素,docElement.getTagName());

            //现在得到根元素的节点列表
            节点列表节点列表= docElement.getElementsByTagName(书);
            Log.i(节点列表长度,nodeList.getLength()+);
            的for(int i = 0; I&LT; nodeList.getLength();我++){

                元件eleBook =(元件)nodeList.item(ⅰ);
                Log.i(尚书节点,eleBook.getTagName());

                节点列表titleNode = eleBook.getElementsByTagName(标题);
                元件TitleEle =(元件)titleNode.item(0);
                Log.i(标题,标题 - + TitleEle.getFirstChild()getNodeValue());

                节点列表AuthorFName1Node = eleBook.getElementsByTagName(AuthorFName1);
                元件AuthorFName1Ele =(元件)AuthorFName1Node.item(0);
                Log.i(AuthorFName1,AuthorFName1  - + AuthorFName1Ele.getFirstChild()getNodeValue());

                节点列表AuthorFName11Node = eleBook.getElementsByTagName(AuthorLName1);
                元件AuthorFName11Ele =(元件)AuthorFName11Node.item(0);
                Log.i(AuthorLName1,AuthorLName1  - + AuthorFName11Ele.getFirstChild()getNodeValue());
            }
        }
        赶上(例外五){
            e.printStackTrace();
        }
    }
 

I'm parsing XML which is on the server I read it and parse it There is no any error But I'm unable to see the data.

Here is my XML:

<BookData><book><Title><![CDATA[ABC]]></Title><AuthorFName1><![CDATA[A]]></AuthorFName1><AuthorLName1><![CDATA[B]]></AuthorLName1></book><book><Title><![CDATA[XYZ]]></Title><AuthorFName1><![CDATA[A]]></AuthorFName1><AuthorLName1><![CDATA[B]]></AuthorLName1></book>

I'm using DocumentBuilderFactory see the code even I set

dbf.setCoalescing(true);

But still not working please see the code for DocumentBuilderFactory

Document doc = null;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setCoalescing(true);
try {
    DocumentBuilder db = dbf.newDocumentBuilder();
    InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(xml));
    doc = db.parse(is);
} catch (ParserConfigurationException e) {
    Log.d("XML parse Error:", e.getMessage());
    return null;
} catch (SAXException e) {
    Log.d("Wrong XML File Structure", e.getMessage());
    return null;
} catch (IOException e) {
    Log.d("IOException", e.getMessage());
    return null;
}

解决方案

Try this, you just have to pass InputSource instance to this method and it works.

private void DOMParser(InputSource inputSource) {

        DocumentBuilderFactory dBuilderFactory = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder documentBuilder = dBuilderFactory.newDocumentBuilder();
            Document dom = documentBuilder.parse(inputSource);

            // get the root element.....
            Element docElement = dom.getDocumentElement();
            Log.i("Root Element", docElement.getTagName());

            // now get the NodeList of root elements
            NodeList nodeList = docElement.getElementsByTagName("book");
            Log.i("NodeList Length", nodeList.getLength()+"");
            for (int i = 0; i < nodeList.getLength(); i++) {

                Element eleBook = (Element) nodeList.item(i);
                Log.i("Book Node", eleBook.getTagName());

                NodeList titleNode = eleBook.getElementsByTagName("Title");
                Element TitleEle = (Element) titleNode.item(0);
                Log.i("Title", "Title - "+TitleEle.getFirstChild().getNodeValue());

                NodeList AuthorFName1Node = eleBook.getElementsByTagName("AuthorFName1");
                Element AuthorFName1Ele = (Element) AuthorFName1Node.item(0);
                Log.i("AuthorFName1","AuthorFName1 - "+AuthorFName1Ele.getFirstChild().getNodeValue());

                NodeList AuthorFName11Node = eleBook.getElementsByTagName("AuthorLName1");
                Element AuthorFName11Ele = (Element) AuthorFName11Node.item(0);
                Log.i("AuthorLName1","AuthorLName1 - "+AuthorFName11Ele.getFirstChild().getNodeValue());
            }
        } 
        catch (Exception e) {
            e.printStackTrace();
        }
    }

这篇关于在Android的解析CDATA的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆