如何跳过XML标记?

时间:2013-05-10 21:19:19

标签: java xml xml-parsing

我正在尝试解析一些处理位置的XML。以下是XML的示例。

<location>
    <city lat="51.5078" lng="-0.128" displayName="London">
        <country displayName="UK"/>
    </city>
    <metroArea lat="51.5078" lng="-0.128" displayName="London" id="24426">
        <country displayName="UK"/>
    </metroArea>
</location>
<location>
    <city lat="42.9833" lng="-81.25" displayName="London">
        <country displayName="Canada"/>
        <state displayName="ON"/>
    </city>
    <metroArea lat="42.9833" lng="-81.25" displayName="London" id="27374">
        <country displayName="Canada"/>
        <state displayName="ON"/>
    </metroArea>
</location>

在上述XML伦敦,英国没有州,但加拿大的伦敦也有。解析时的结果是

  • 伦敦,ON
  • UK
  • 肯塔基州伦敦
  • 加拿大

如何跳过“州”标签以获得以下结果?

  • 伦敦
  • UK
  • 伦敦,ON
  • 加拿大

这是我正在使用的Java代码。

private void addCitiesToHashmap(List<HashMap<String, String>> menuItems, String xml) 
    {
        XMLParser parser = new XMLParser();

        Document doc = parser.getDomElement(xml);

        NodeList nl = doc.getElementsByTagName(KEY_METRO_AREA);
        for (int i = 0; i < nl.getLength(); i++) 
        {
            HashMap<String, String> map = new HashMap<String, String>();
            Element e = (Element) nl.item(i);
            map.put(KEY_ID, e.getAttribute(KEY_ID));
            NodeList nl3 = doc.getElementsByTagName(KEY_CITY);
            {
                Element g = (Element) nl3.item(i);
                map.put(KEY_DISPLAY_NAME , g.getAttribute(KEY_DISPLAY_NAME ));
            }
            NodeList nl4 = doc.getElementsByTagName(KEY_COUNTRY);
            {
                Element h = (Element) nl4.item(i);
                map.put(KEY_DISPLAY_NAME_4 + "3" , h.getAttribute(KEY_DISPLAY_NAME_4 ));
            }
            NodeList nl2 = doc.getElementsByTagName(KEY_STATE);
            {
                Element f = (Element) nl2.item(i);
                if (f != null)
                    map.put(KEY_DISPLAY_NAME_2 + "2" , f.getAttribute(KEY_DISPLAY_NAME_2 ));

                menuItems.add(map);
            }
        }

1 个答案:

答案 0 :(得分:0)

根据您的需求定义,为了从第一条记录中“跳过”状态字段,您可以将Substring()方法与IndexOf(',')结合使用,以便找到逗号的位置并删除以下部分