如何解析XML文件使用DOM解析? [英] How to Parse XML file Using Dom Parsing?
本文介绍了如何解析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屋!
查看全文