gpt4 book ai didi

android - 使用 XmlPullParser 解析 xml

转载 作者:行者123 更新时间:2023-11-29 14:55:23 24 4
gpt4 key购买 nike

我正在使用 android 并在 android 中使用 xmlpullparser 来解析 xml 文档,如下所示:

<spaces>
<space>
<name></name>
<desc></desc>
<songs>
<song>
<name></name>
<thumb></thumb>
</song>
<song>
<name></name>
<thumb></thumb>
</song>
</songs>
</space>
</spaces>

我正在使用这个:

public List<Space> parse(String xmlString) {
List<Space> Spaces = null;
XmlPullParser parser = Xml.newPullParser();
try {
parser.setInput(new StringReader(xmlString));
int eventType = parser.getEventType();
Space currentSpace = null;
boolean done = false;
while (eventType != XmlPullParser.END_DOCUMENT && !done) {
String name = null;
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
Spaces = new ArrayList<Space>();
break;
case XmlPullParser.START_TAG:
name = parser.getName();
if (name.equalsIgnoreCase("space")) {
currentSpace = new Space();
System.out.println("space");

} else if (currentSpace != null) {

if (name.equalsIgnoreCase("name")) {
currentSpace.setName(parser.nextText());
System.out.println(":::"+currentSpace.getName());

} else if (name.equalsIgnoreCase("id")) {
if (currentSpace.getId() == null) {
currentSpace.setId(parser.nextText());
}

}

}

break;
case XmlPullParser.END_TAG:
name = parser.getName();
if (name.equalsIgnoreCase("space") && currentSpace != null) {
Spaces.add(currentSpace);

} else if (name.equalsIgnoreCase("spaces")) {
done = true;

}
break;
}
eventType = parser.next();
}
} catch (Exception e) {
Log.e("Projects List", e.getMessage(), e);
throw new RuntimeException(e);
}
return Spaces;
}

我的问题是我只想要 <name></name>这是在 <space>不在 <song> 内并使用上面的代码得到两者。

我看了Parsing XML XmlPullParser android但不能得到我的解决方案。

请回复。谢谢。

最佳答案

在解析 START_TAG 时,当您解析 <space> 时标记,取一个计数器变量并将其赋值 1 然后每当你得到 <name>标记,将其递增 1。

现在,在解析 <name> 时标记,只需检查是否<name>标记第一次出现,如果是则解析所需的值。

case XmlPullParser.START_TAG:
name = parser.getName();
if (name.equalsIgnoreCase("space")) {
cnt=1;
currentSpace = new Space();
System.out.println("space");

} else if (currentSpace != null) {

if (name.equalsIgnoreCase("name"))
{
currentSpace.setName(parser.nextText());
if(cnt==1)
{
// you have <name> from <space>
}
System.out.println(":::"+currentSpace.getName());
cnt++;
} else if (name.equalsIgnoreCase("id")) {
if (currentSpace.getId() == null) {
currentSpace.setId(parser.nextText());
}

}

}

break;

关于android - 使用 XmlPullParser 解析 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8018305/

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