gpt4 book ai didi

java - XmlPullParser - 解析嵌套标记

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:51:15 25 4
gpt4 key购买 nike

我有这个 XML:

<menu>
<day name="monday">
<meal name="BREAKFAST">
<counter name="Bread">
<dish>
<name>Plain Bagel</name>
</dish>
<counter/>
<meal/>
<day/>
<day name="tuesday">
<meal name="LUNCH">
<counter name="Other">
<dish>
<name>Cheese Bagel</name>
</dish>
<counter/>
<meal/>
<day/>
<menu/>

如果 day 标签的属性等于 monday,这就是我正在尝试做的事情。然后 meals 标签属性等于 BREAKFAST,然后我想获取计数器的属性。 “面包”。

我已经设置了 xml pull 解析器,但我很难获得这个值。这是我尝试过的方法,现在我发现它不能也不会起作用......所以任何关于如何设置它来做到这一点的帮助都会很棒。

while (eventType != XmlResourceParser.END_DOCUMENT) {
String tagName = xmlData.getName();

switch (eventType) {
case XmlResourceParser.START_TAG:
if (tagName.equalsIgnoreCase("day")) {
if (xmlData.getAttributeValue(null, "name").equalsIgnoreCase(day)) {
if (tagName.equalsIgnoreCase("meal")) {
mealArray.add(xmlData.getAttributeValue(null, "name"));
Log.i(TAG, xmlData.getAttributeValue(null, "name"));
}
}


}
break;
case XmlResourceParser.TEXT:
break;
case XmlPullParser.END_TAG:

break;
}
eventType = xmlData.next();
}

最佳答案

您需要添加解析嵌套标签的逻辑:

一个非常简单的例子来帮助你继续前进:

我解析了这个字符串:

<menu><day name=\"monday\"><meal name=\"BREAKFAST\"><meal/><day/></menu>

代码:

try {
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();

xpp.setInput(new StringReader("<menu><day name=\"monday\"><meal name=\"BREAKFAST\"><meal/><day/></menu>"));
int eventType = xpp.getEventType();
while (eventType != XmlResourceParser.END_DOCUMENT) {
String tagName = xpp.getName();

switch (eventType) {
case XmlResourceParser.START_TAG:
if (tagName.equalsIgnoreCase("day")) {
if (xpp.getAttributeValue(null, "name").equalsIgnoreCase("MONDAY")) {
int eventType2 = xpp.next();
while (eventType2 != XmlResourceParser.END_DOCUMENT) {
String tagName2 = xpp.getName();
switch (eventType2) {
case XmlResourceParser.START_TAG:
if (tagName2.equalsIgnoreCase("meal")) {
Log.i("tag", "meal: " + xpp.getAttributeValue(null, "name"));
}
break;
case XmlResourceParser.TEXT:
break;
case XmlPullParser.END_TAG:
break;
}
eventType2 = xpp.next();
}
}
}
break;
case XmlResourceParser.TEXT:
break;
case XmlPullParser.END_TAG:
break;
}
eventType = xpp.next();
}

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

你看出区别了吧?

基本上,我在得到我想要的那一天之后添加了这个。 (在我的例子中,硬编码字符串 "Monday" 。)

int eventType2 = xpp.next();

并基于此eventType2 , 检索到 tagName2这将是为了“吃饭”

A better example帮助您以良好的方式编写逻辑。

希望这对您有所帮助。

关于java - XmlPullParser - 解析嵌套标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27415449/

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