如何解析XML文件使用DOM解析? [英] How to Parse XML file Using Dom Parsing?

查看:121
本文介绍了如何解析XML文件使用DOM解析?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题是我使用DOM解析来解析下面的XML文件,但这个给我NullPointerException异常的错误。

任何帮助,将鸭preciated。

MainActivity.java

 公共类MainActivity延伸活动{
    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);

        滚动型mScrView1 =新的滚动型(本);

        / **创建一个新的布局,以显示视图* /
        的LinearLayout布局=新的LinearLayout(本);
        layout.setOrientation(1);

        / **创建一个新的TextView数组来显示结果* /
        TextView的ID [];
        TextView中发表[];
        TextView的内容[];
        TextView的标题[];

        TextView的mediacontent [];
        TextView的mediathumbnail [];

        尝试 {

            网址URL =新的URL(
                    http://gdata.youtube.com/feeds/api/users/estudiosabiertostv/uploads);
            DocumentBuilderFactory的DBF = DocumentBuilderFactory.newInstance();
            DocumentBuilder的DB = dbf.newDocumentBuilder();
            文档的文档= db.parse(新的InputSource(url.openStream()));
            doc.getDocumentElement()归()。

            节点列表节点列表= doc.getElementsByTagName(输入);

            / **由ArrayList的大小分配的TextView数组长度* /
            ID =新的TextView [nodeList.getLength()];
            出版=新的TextView [nodeList.getLength()];
            内容=新的TextView [nodeList.getLength()];
            标题=新的TextView [nodeList.getLength()];
            mediacontent =新的TextView [nodeList.getLength()];
            mediathumbnail =新的TextView [nodeList.getLength()];

            的for(int i = 0; I< nodeList.getLength();我++){

                节点node = nodeList.item(ⅰ);

                ID [i] =新的TextView(本);
                发表[我] =新的TextView(本);
                内容[我] =新的TextView(本);
                标题[i] =新的TextView(本);

                元素fstElmnt =(元)节点;

                节点列表IDLIST = fstElmnt.getElementsByTagName(ID);
                元件idElement =(元件)idList.item(0);
                IDLIST = idElement.getChildNodes();
                ID [I] .setText(ID是=
                        +((节点)idList.item(0))getNodeValue())。

                节点列表publishedList = fstElmnt
                        .getElementsByTagName(发布);
                元件publishedElement =(元件)publishedList.item(0);
                publishedList = publishedElement.getChildNodes();
                发表[我] .setText(上发表的=
                        +((节点)publishedList.item(0))getNodeValue())。

                节点列表contentList = fstElmnt.getElementsByTagName(内容);
                元素ContentElement的=(元)contentList.item(0);
                contentList = contentElement.getChildNodes();
                内容[我] .setText(内容=
                        +((节点)contentList.item(0))getNodeValue())。

                节点列表titleList = fstElmnt.getElementsByTagName(标题);
                元件titleElement =(元件)titleList.item(0);
                titleList = titleElement.getChildNodes();
                标题[I] .setText(标题=
                        +((节点)titleList.item(0))getNodeValue())。

                节点列表nodeList1 = fstElmnt.getElementsByTagName(媒体:集团);
                的System.out.println(尺寸是: - + nodeList1.getLength());

                对于(INT J = 0; J< nodeList1.getLength(); J ++){
                    节点节点1 = nodeList1.item(J);
                    mediacontent [J] =新的TextView(本);
                    mediathumbnail [J] =新的TextView(本);
                    元素secondElmnt =(元)节点1;
                    节点列表mediacontentList = secondElmnt.getElementsByTagName(媒体:内容);
                    元件mediacontentElement =(元件)mediacontentList.item(0);
                    mediacontentList = mediacontentElement.getChildNodes();
                    mediacontent [J] .setText(mediacontent是=
                            +((节点)mediacontentList.item(0))getNodeValue())。
                    layout.addView(mediacontent [J]);
                }

                layout.addView(ID [I]);
                layout.addView(公布[I]);
                layout.addView(内容[我]);
                layout.addView(标题[I]);
            }
        }赶上(例外五){
            的System.out.println(XML帕兴Excpetion =+ E);
        }

        / **设置布局视图中显示* /

        mScrView1.addView(布局);
        的setContentView(mScrView1);
    }
}
 

解决方案

试试这个:

 公共类DomParserSampleActivity延伸活动{
    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);

        滚动型mScrView1 =新的滚动型(本);

        / **创建一个新的布局,以显示视图* /
        的LinearLayout布局=新的LinearLayout(本);
        layout.setOrientation(1);

        / **创建一个新的TextView数组来显示结果* /
        TextView的ID [];
        TextView中发表[];
        TextView的内容[];
        TextView的标题[];

        TextView的mediacontent [];
        TextView的mediathumbnail [];

        尝试 {
            网址URL =新的URL(
                    http://gdata.youtube.com/feeds/api/users/estudiosabiertostv/uploads);
            DocumentBuilderFactory的DBF = DocumentBuilderFactory.newInstance();
            DocumentBuilder的DB = dbf.newDocumentBuilder();
            文档的文档= db.parse(新的InputSource(url.openStream()));
            doc.getDocumentElement()归()。

            节点列表节点列表= doc.getElementsByTagName(输入);

            / **由ArrayList的大小分配的TextView数组长度* /
            ID =新的TextView [nodeList.getLength()];
            出版=新的TextView [nodeList.getLength()];
            内容=新的TextView [nodeList.getLength()];
            标题=新的TextView [nodeList.getLength()];
            mediacontent =新的TextView [nodeList.getLength()];
            mediathumbnail =新的TextView [nodeList.getLength()];

            的for(int i = 0; I< nodeList.getLength();我++){

                节点node = nodeList.item(ⅰ);

                ID [i] =新的TextView(本);
                发表[我] =新的TextView(本);
                内容[我] =新的TextView(本);
                标题[i] =新的TextView(本);

                元素fstElmnt =(元)节点;

                节点列表IDLIST = fstElmnt.getElementsByTagName(ID);
                元件idElement =(元件)idList.item(0);
                IDLIST = idElement.getChildNodes();
                ID [I] .setText(ID是=
                        +((节点)idList.item(0))getNodeValue())。

                Log.v(TAG,ID:+ idList.item(0).getNodeValue());

                节点列表publishedList = fstElmnt
                        .getElementsByTagName(发布);
                元件publishedElement =(元件)publishedList.item(0);
                publishedList = publishedElement.getChildNodes();
                发表[我] .setText(上发表的=
                        +((节点)publishedList.item(0))getNodeValue())。

                Log.v(TAG,发表:+ publishedList.item(0).getNodeValue());

                节点列表contentList = fstElmnt.getElementsByTagName(内容);
                元素ContentElement的=(元)contentList.item(0);
                contentList = contentElement.getChildNodes();
                内容[我] .setText(内容=
                        +((节点)contentList.item(0))getNodeValue())。

                Log.v(TAG,内容:+ contentList.item(0).getNodeValue());

                节点列表titleList = fstElmnt.getElementsByTagName(标题);
                元件titleElement =(元件)titleList.item(0);
                titleList = titleElement.getChildNodes();
                标题[I] .setText(标题=
                        +((节点)titleList.item(0))getNodeValue())。

                Log.v(TAG,TITULO:+ titleList.item(0).getNodeValue());

                节点列表nodeList1 = fstElmnt
                        .getElementsByTagName(媒体:集团);

                对于(INT J = 0; J< nodeList1.getLength(); J ++){
                    节点节点1 = nodeList1.item(J);
                    mediacontent [J] =新的TextView(本);
                    mediathumbnail [J] =新的TextView(本);

                    元素secondElmnt =(元)节点1;

                    节点列表mediacontentList = secondElmnt
                            .getElementsByTagName(媒体:内容);
                    元素mediacontentElement =(元)mediacontentList
                            .item(0);
                    mediacontent [J] .setText(mediacontent网址是=
                            + mediacontentElement.getAttribute(URL));

                    Log.v(TAG,MEDIACONTENT:+ mediacontentElement.getAttribute(URL));

                    节点列表mediathumbnailList = secondElmnt
                            .getElementsByTagName(媒体:缩略图);
                    元素mediathumbnailElement =(元)mediathumbnailList
                            .item(0);
                    mediathumbnail [J] .setText(mediathumbnail网址是=
                            + mediathumbnailElement.getAttribute(URL));

                    Log.v(TAG,MEDIATHUMBNAIL:+ mediathumbnailElement.getAttribute(URL));

                    layout.addView(mediacontent [J]);
                    layout.addView(mediathumbnail [J]);
                }

                layout.addView(ID [I]);
                layout.addView(公布[I]);
                layout.addView(内容[我]);
                layout.addView(标题[I]);

            }
        }赶上(例外五){
            e.printStackTrace();
        }

        / **设置布局视图中显示* /

        mScrView1.addView(布局);
        的setContentView(mScrView1);
    }
}
 

不要忘了一根线,如果做不到这一点内这样做,用这些线 之后的onCreate()

  StrictMode.ThreadPolicy政策=新StrictMode.ThreadPolicy.Builder()
.permitAll()建立()。
    StrictMode.setThreadPolicy(政策);
 

My Problem is I am Using Dom Parsing to parse below xml file but this give me error of NullPointerException.

Any Help Would be Appreciated.

MainActivity.java

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ScrollView mScrView1 = new ScrollView(this);

        /** Create a new layout to display the view */
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(1);

        /** Create a new textview array to display the results */
        TextView id[];
        TextView published[];
        TextView content[];
        TextView title[];

        TextView mediacontent[];
        TextView mediathumbnail[];

        try {

            URL url = new URL(
                    "http://gdata.youtube.com/feeds/api/users/estudiosabiertostv/uploads");
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(new InputSource(url.openStream()));
            doc.getDocumentElement().normalize();

            NodeList nodeList = doc.getElementsByTagName("entry");

            /** Assign textview array length by arraylist size */
            id = new TextView[nodeList.getLength()];
            published = new TextView[nodeList.getLength()];
            content = new TextView[nodeList.getLength()];
            title = new TextView[nodeList.getLength()];
            mediacontent = new TextView[nodeList.getLength()];
            mediathumbnail = new TextView[nodeList.getLength()];

            for (int i = 0; i < nodeList.getLength(); i++) {

                Node node = nodeList.item(i);

                id[i] = new TextView(this);
                published[i] = new TextView(this);
                content[i] = new TextView(this);
                title[i] = new TextView(this);

                Element fstElmnt = (Element) node;

                NodeList idList = fstElmnt.getElementsByTagName("id");
                Element idElement = (Element) idList.item(0);
                idList = idElement.getChildNodes();
                id[i].setText("Id is = "
                        + ((Node) idList.item(0)).getNodeValue());

                NodeList publishedList = fstElmnt
                        .getElementsByTagName("published");
                Element publishedElement = (Element) publishedList.item(0);
                publishedList = publishedElement.getChildNodes();
                published[i].setText("published is = "
                        + ((Node) publishedList.item(0)).getNodeValue());

                NodeList contentList = fstElmnt.getElementsByTagName("content");
                Element contentElement = (Element) contentList.item(0);
                contentList = contentElement.getChildNodes();
                content[i].setText("content is = "
                        + ((Node) contentList.item(0)).getNodeValue());

                NodeList titleList = fstElmnt.getElementsByTagName("title");
                Element titleElement = (Element) titleList.item(0);
                titleList = titleElement.getChildNodes();
                title[i].setText("title is = "
                        + ((Node) titleList.item(0)).getNodeValue());

                NodeList nodeList1 = fstElmnt.getElementsByTagName("media:group");
                System.out.println("Size is:- " +nodeList1.getLength());

                for (int j = 0; j < nodeList1.getLength(); j++) {
                    Node node1 = nodeList1.item(j);
                    mediacontent[j] = new TextView(this);
                    mediathumbnail[j] = new TextView(this);
                    Element secondElmnt = (Element) node1;
                    NodeList mediacontentList = secondElmnt.getElementsByTagName("media:content");
                    Element mediacontentElement = (Element) mediacontentList.item(0);
                    mediacontentList = mediacontentElement.getChildNodes();
                    mediacontent[j].setText("mediacontent is = "
                            + ((Node) mediacontentList.item(0)).getNodeValue());
                    layout.addView(mediacontent[j]);
                }

                layout.addView(id[i]);
                layout.addView(published[i]);
                layout.addView(content[i]);
                layout.addView(title[i]);
            }
        } catch (Exception e) {
            System.out.println("XML Pasing Excpetion = " + e);
        }

        /** Set the layout view to display */

        mScrView1.addView(layout);
        setContentView(mScrView1);
    }
}

解决方案

Try this:

public class DomParserSampleActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ScrollView mScrView1 = new ScrollView(this);

        /** Create a new layout to display the view */
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(1);

        /** Create a new textview array to display the results */
        TextView id[];
        TextView published[];
        TextView content[];
        TextView title[];

        TextView mediacontent[];
        TextView mediathumbnail[];

        try {
            URL url = new URL(
                    "http://gdata.youtube.com/feeds/api/users/estudiosabiertostv/uploads");
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(new InputSource(url.openStream()));
            doc.getDocumentElement().normalize();

            NodeList nodeList = doc.getElementsByTagName("entry");

            /** Assign textview array length by arraylist size */
            id = new TextView[nodeList.getLength()];
            published = new TextView[nodeList.getLength()];
            content = new TextView[nodeList.getLength()];
            title = new TextView[nodeList.getLength()];
            mediacontent = new TextView[nodeList.getLength()];
            mediathumbnail = new TextView[nodeList.getLength()];

            for (int i = 0; i < nodeList.getLength(); i++) {

                Node node = nodeList.item(i);

                id[i] = new TextView(this);
                published[i] = new TextView(this);
                content[i] = new TextView(this);
                title[i] = new TextView(this);

                Element fstElmnt = (Element) node;

                NodeList idList = fstElmnt.getElementsByTagName("id");
                Element idElement = (Element) idList.item(0);
                idList = idElement.getChildNodes();
                id[i].setText("Id is = "
                        + ((Node) idList.item(0)).getNodeValue());

                Log.v("TAG","id: "+idList.item(0).getNodeValue());

                NodeList publishedList = fstElmnt
                        .getElementsByTagName("published");
                Element publishedElement = (Element) publishedList.item(0);
                publishedList = publishedElement.getChildNodes();
                published[i].setText("published is = "
                        + ((Node) publishedList.item(0)).getNodeValue());

                Log.v("TAG","published: "+publishedList.item(0).getNodeValue());

                NodeList contentList = fstElmnt.getElementsByTagName("content");
                Element contentElement = (Element) contentList.item(0);
                contentList = contentElement.getChildNodes();
                content[i].setText("content is = "
                        + ((Node) contentList.item(0)).getNodeValue());

                Log.v("TAG","content: "+contentList.item(0).getNodeValue());

                NodeList titleList = fstElmnt.getElementsByTagName("title");
                Element titleElement = (Element) titleList.item(0);
                titleList = titleElement.getChildNodes();
                title[i].setText("title is = "
                        + ((Node) titleList.item(0)).getNodeValue());

                Log.v("TAG","titulo: "+titleList.item(0).getNodeValue());

                NodeList nodeList1 = fstElmnt
                        .getElementsByTagName("media:group");

                for (int j = 0; j < nodeList1.getLength(); j++) {
                    Node node1 = nodeList1.item(j);
                    mediacontent[j] = new TextView(this);
                    mediathumbnail[j] = new TextView(this);

                    Element secondElmnt = (Element) node1;

                    NodeList mediacontentList = secondElmnt
                            .getElementsByTagName("media:content");
                    Element mediacontentElement = (Element) mediacontentList
                            .item(0);
                    mediacontent[j].setText("mediacontent url is = "
                            + mediacontentElement.getAttribute("url"));

                    Log.v("TAG","MEDIACONTENT: "+mediacontentElement.getAttribute("url"));

                    NodeList mediathumbnailList = secondElmnt
                            .getElementsByTagName("media:thumbnail");
                    Element mediathumbnailElement = (Element) mediathumbnailList
                            .item(0);
                    mediathumbnail[j].setText("mediathumbnail url is = "
                            + mediathumbnailElement.getAttribute("url"));

                    Log.v("TAG","MEDIATHUMBNAIL: "+mediathumbnailElement.getAttribute("url"));

                    layout.addView(mediacontent[j]);
                    layout.addView(mediathumbnail[j]);
                }

                layout.addView(id[i]);
                layout.addView(published[i]);
                layout.addView(content[i]);
                layout.addView(title[i]);

            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        /** Set the layout view to display */

        mScrView1.addView(layout);
        setContentView(mScrView1);
    }
}

Do not forget to do so within a thread or failing that, use these lines After the onCreate()

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
    StrictMode.setThreadPolicy(policy);

这篇关于如何解析XML文件使用DOM解析?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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