我想要以下 XML 中的两个哈希表。第一个是 (screen id,widget id),第二个是 (widget id,string id)。
我已经能够使用 DOM 解析这个 XML,但是我还没有将它的内容放入哈希表中。
<?xml version="1.0" encoding="UTF-8"?>
<screen id="616699" name ="SCR_NEW_HOME">
        <widget id="617259" type="label" name= "NEW_HOME_TITLE">
        <attribute type = "Strings">
            <val id="54">HOME_SYSSETUP</val>
        </attribute>
        </widget>
        <widget id="616836" type = "label" name ="HOME_MENU">
        <attribute type="Strings">
                <val id="1815" >DAILY</val>
                <val id="2060" >MONTH_NOV</val>
                <val id="1221" >ASPECT_RATIO_PANSCAN</val>
        </attribute>
        </widget>
<screen id="1556" name="SCR_EVENTLIST">
        <widget id="77009" type= "label" name="EL_GUIDE_EVENT_TABLE">
        <attribute type ="Strings">
                <val id="1">time</val>
                <val id="2">date</val>
        </attribute>
        </widget>
        <widget id="186461" type= "label" name= "EL_PIG_CONT">
        <attribute type ="Strings">
                <val id="3">progress bar</val>
                <val id="4">video</val>
        </attribute>
    </widget>
我试过的代码是
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Hashtable;
public class ReadXmlFile {
    private static Hashtable<Integer,ArrayList<Integer>> D1 = new Hashtable<Integer, ArrayList<Integer>>();
    private static Hashtable<Integer,ArrayList<Integer>> D2 = new Hashtable<Integer,ArrayList<Integer>>();
     static Integer ScreenID;
     static ArrayList<Integer> StringID;
     static ArrayList<Integer> WidgetID;
     static Integer WidgetID2;
  public static void main(String argv[]) {
   // try {
    File fXmlFile = new File("E:/eclipse workspace/stringValidation/screens.xml");
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = null;
    try {
        dBuilder = dbFactory.newDocumentBuilder();
    } catch (ParserConfigurationException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    Document doc = null;
    try {
        doc = dBuilder.parse(fXmlFile);
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    doc.getDocumentElement().normalize();
    System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
    if(doc.hasChildNodes()){
        printNote(doc.getChildNodes());
    }
    }
private static void printNote(NodeList nodeList) {
        for (int count = 0; count < nodeList.getLength(); count++) {
        Node tempNode = nodeList.item(count);
        // make sure it's element node.
        if (tempNode.getNodeType() == Node.ELEMENT_NODE) {
            // get node name and value
            System.out.println("\nNode Name =" + tempNode.getNodeName() + " [OPEN]");
            System.out.println("Node Value =" + tempNode.getTextContent());
            if (tempNode.hasAttributes()) {
                // get attributes names and values
                NamedNodeMap nodeMap = tempNode.getAttributes();
                for (int i = 0; i < nodeMap.getLength(); i++) {
                    Node node = nodeMap.item(i);
                    System.out.println("attr name : " + node.getNodeName());
                    System.out.println("attr value : " + node.getNodeValue());
            }
        }
        if (tempNode.hasChildNodes()) {
            // loop again if has child nodes
            printNote(tempNode.getChildNodes());
        }
        System.out.println("Node Name =" + tempNode.getNodeName() + " [CLOSE]");
    }
    }
  }
}