使用具有类似值的NodeList

时间:2015-02-13 13:07:02

标签: android xml nodelist

我有以下xml文件来存储我的事件:

<event
    day="23"
    month="4"
    year="2015"
    mod="mod1" >
    event 1

</event>

<event
    day="23"
    month="4"
    year="2015"
    mod="mod1" >
    event 2

</event>

<event
    day="24"
    month="6"
    year="2015"
    mod="mod2" >
    event 3

</event>

<event
    day="24"
    month="7"
    year="2015"
    mod="mod3" >
    event 4

</event>

并使用此methed加载事件:

private List<Event> events;

public void loadEvents(InputStream xmlStream) {
    events = new ArrayList<Event>();
    DocumentBuilder builder;
    try {
        builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

        Document document = builder.parse(xmlStream);

        NodeList eventsNodes = document.getElementsByTagName("event");
        for (Node node : new IterableNodeList(eventsNodes)) {
            NamedNodeMap attrs = node.getAttributes();

            int year = Integer.parseInt(attrs.getNamedItem("year")
                    .getNodeValue());
            int month = Integer.parseInt(attrs.getNamedItem("month")
                    .getNodeValue());
            int day = Integer.parseInt(attrs.getNamedItem("day")
                    .getNodeValue());

            String mod = attrs.getNamedItem("mod").getNodeValue();

            String eventTitle = node.getFirstChild().getNodeValue();

            if(mod.equals("mod1")){
                events.add(new Event(new CivilDate(year, month, day),
                        eventTitle + "mod1"));
            }

            if(mod.equals("mod2")){
                events.add(new Event(new CivilDate(year, month, day),
                        eventTitle + "mod2"));
            }

            if(mod.equals("mod3")){
                events.add(new Event(new CivilDate(year, month, day),
                        eventTitle + "mod3"));
            }

        }

    } catch (ParserConfigurationException e) {
        Log.e("ERR", e.getMessage());
    } catch (SAXException e) {
        Log.e("ERR", e.getMessage());
    } catch (IOException e) {
        Log.e("ERR", e.getMessage());
    }
}

这是为了获取事件:

public String getEventTitle(CivilDate date) {
    for (Event event : events) {
        if (event.getDate().equals(date)) {
            // trim XML whitespaces and newlines
            return event.getTitle().replaceAll("\n", "").trim();
        }
    }
    return null;
}

但我有问题...在我的xml文件中我有2个相似的日期和不同的事件,如果我尝试在同一日期获取事件仅返回&#34;事件1&#34;。

1 个答案:

答案 0 :(得分:2)

如果日期匹配则返回,因此只返回第一个。

public ArrayList<String> getEventTitle(CivilDate date) {
ArrayList<String> events = new ArrayList<String>();
for (Event event : events) {
    if (event.getDate().equals(date)) {
        // trim XML whitespaces and newlines
       events.add(event.getTitle().replaceAll("\n", "").trim());
    }
}
return events ;

}

相关问题