xml 例程不处理我想要的子节点


    <report id="oleg">
        <title>olegitimerade rapport</title>
        <id_email>joch1</id_email>
        <id_email>kang15</id_email>
    </report>

我正在将以下代码与 DOM XML 解析器一起使用,以提取上面的列表一个 xml 文件。

String tag = "report";
String[] elementTags = new String[] {"title", "id_email"};
NodeList nList = this.doc.getElementsByTagName(tag);
    try{
        for (int temp = 0; temp < nList.getLength(); temp++) {
            Node nNode = nList.item(temp);
            if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                HashMap<String, String> attribute = new HashMap<String, String>();
                Element eElement = (Element) nNode;
                if(eElement.hasAttribute("id")){
                    String id = eElement.getAttribute("id");
                    attribute.put("id", id);            
                    for (String elementTag : elementTags){
                        try{
                            int index=0;
                            while(null!=eElement.getElementsByTagName(elementTag).item(index).getTextContent()){
                                attribute.put(elementTag, eElement.getElementsByTagName(elementTag).item(index).getTextContent());
                                index++;
                            }
                        }catch (Exception e){
                            //System.out.println("id : "+id+" - Attribute element '"+ elementTag+ "' not found in XML! ["+this.xmlFile+"]");
                        }   
                    }
                    attributes.add(attribute);
                }
            }
        }
    }catch (Exception e) {
        e.printStackTrace();
    }

问题是当我得到多个标签时....我无法提取第二个 ID (kang15)。

显然,while 循环不正确,所以我在这里需要一点帮助来解决问题。

   while(null!=eElement.getElementsByTagName(elementTag).item(index).getTextContent()){
                            attribute.put(elementTag, eElement.getElementsByTagName(elementTag).item(index).getTextContent());
                            index++;
                        }

考虑使用 XPath 来实现此目的:

XPath xpath = XPathFactory
    .newInstance()
    .newXPath();
Element report = (Element) xpath.evaluate("//report", doc, XPathConstants.NODE);
String id = xpath.evaluate("@id", report);
String title = xpath.evaluate("title", report);
NodeList emails = (NodeList)
              xpath.evaluate("id_email/text()", report, XPathConstants.NODESET);
System.out.println(id);
System.out.println(title);
for(int i=0; i<emails.getLength(); i++) {
  System.out.println(emails.item(i).getTextContent());
}

最新更新