gpt4 book ai didi

java - XML 解析器获取 null

转载 作者:太空宇宙 更新时间:2023-11-04 14:11:09 26 4
gpt4 key购买 nike

我尝试解析 XML 文档并将结果添加到列表中。我每次都变得空了。我不知道我做错了什么。读取是在主线程之外,最后它调用将 Intent 发送到另一个 Activity 的方法。您可以从代码中的 URL 查看 XML。谢谢回答。这是我的代码:

    t = new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(
"http://www.ynet.co.il/Integration/StoryRss4880.xml");
XmlPullParserFactory factory = XmlPullParserFactory
.newInstance();
factory.setNamespaceAware(false);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(getInputStream(url), "UTF_8");
boolean insideItem = false;
int eventType = xpp.getEventType();
String l = null;
String tit = null;
String p = null;
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
if (xpp.getName().equalsIgnoreCase("item")) {
insideItem = true;
if (xpp.getName().equalsIgnoreCase("title")) {
if (insideItem) {
l = xpp.nextText();
}
} else if (xpp.getName().equalsIgnoreCase(
"link")) {
if (insideItem) {
tit = xpp.nextText();
}
} else if (xpp.getName().equalsIgnoreCase(
"description")) {
if (insideItem) {
String array[] = xpp.nextText().split(
"img src='");
String array1[] = array[1]
.split("' alt");
p = array1[0];
}
}
MyArticle.getInstance().getmArticle()
.add(new Article(l, tit, p));
}
} else if (eventType == XmlPullParser.END_TAG
&& xpp.getName().equalsIgnoreCase("item")) {
insideItem = false;
}
eventType = xpp.next();
}
if (eventType == XmlPullParser.END_DOCUMENT) {
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
GoTOActivity(context);

}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
t.start();

最佳答案

问题出在你的内部解析循环上。您测试 xpp.getName() 是否等于“item”,如果是,则将 insideItem 设置为 true,然后立即测试 xpp.getName() 是否等于“title”:

if (xpp.getName().equalsIgnoreCase("item")) {
insideItem = true;
if (xpp.getName().equalsIgnoreCase("title")) {
if (insideItem) {
l = xpp.nextText();
}
}

在这种情况下,它永远不会等于“title”,因为您刚刚测试了它,它等于“item”。在测试“title”之前,您需要读取下一个 XML 开始标记,如下所示:

while (eventType != XmlPullParser.END_DOCUMENT) {                       
if (eventType == XmlPullParser.START_TAG) {
if (xpp.getName().equalsIgnoreCase("item")) {
insideItem = true;
tit = null; l = null; p = null; // clear variables
} else if (xpp.getName().equalsIgnoreCase("title")) {
if (insideItem) {
tit = xpp.nextText();
}
} else if (xpp.getName().equalsIgnoreCase("link")) {
if (insideItem) {
l = xpp.nextText();
}
} else if (xpp.getName().equalsIgnoreCase("description")) {
if (insideItem) {
String array[] = xpp.nextText().split(
"img src='");
String array1[] = array[1]
.split("' alt");
p = array1[0];
}
}
} else if (eventType == XmlPullParser.END_TAG
&& xpp.getName().equalsIgnoreCase("item")) {
insideItem = false;
MyArticle.getInstance().getmArticle()
.add(new Article(l, tit, p));
}
eventType = xpp.next();
}

另请注意,添加新文章的代码位于您检测到“item”关闭标记的位置。最后,我假设 tit 是标题,l 是链接,在这种情况下,您需要交换它们,以便在阅读标题时设置 tit ,反之亦然。希望这会有所帮助。

关于java - XML 解析器获取 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28311517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com