2 Stimmen

Java DOM XML-Parsing

Ich habe also eine XML-Datei in dem Format:

<projectlist>
   <project>
      <name>test</name>
      <type>deploy</type>
      <environment>dev</environment>
      <server>test01</server>
      <server>test02</server>
      <server>test03</server>
   </project>
</projectlist>

Ich versuche, diese Datei zu analysieren und ein Objekt zu erstellen, mit dem ich eine JListBox mit den Namen und eine Radiobutton-Gruppe mit den verschiedenen Servern füllen kann, aber jedes Projekt besteht aus einer unterschiedlichen Anzahl von Servern. Wie kann ich die Knoten/Kinderknoten iterieren, um das Objekt mit mehreren Servern zu erstellen? Hier sind Schnipsel des Codes, die ich von einer Website und einige von mir geliehen bin und ich bin nicht sehr gut in der Codierung noch so mit mir bitte tragen. Wenn ich debuggen beginnt es zu analysieren und bauen das Objekt, aber sobald es auf die Server-Namen bekommt es eine Null-Zeiger-Ausnahme druckt, so dass ich etwas völlig falsch machen.

public class XMLParser {
    public Project currentProject = new Project();

    public void parseXML() throws Exception {

        try {
            File file = new File("c:\\projectlist.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(file);
            doc.getDocumentElement().normalize();

            NodeList nList = doc.getElementsByTagName("project");

            for (int temp = 0; temp < nList.getLength(); temp++) {

                Node nNode = nList.item(temp);
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = (Element) nNode;

                    currentProject.SetAppName(getTagValue("name", eElement));
                    currentProject.SetType(getTagValue("type", eElement));
                    currentProject.SetEnvironment(getTagValue("environment", eElement));
                    currentProject.SetServerName(getTagValue("server", eElement));

                }
            }

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

    }
     private static String getTagValue(String sTag, Element eElement) {
            NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();

                Node nValue = (Node) nlList.item(0);

            return nValue.getNodeValue();
          }

public final class Project {
    protected String AppName = null;
    protected String Type = null;
    protected List<String> ServerNames = null;
    protected String Environment = null;

    public void SetAppName(String AppName) {
        this.AppName = AppName;
    }

    public void SetType(String DeployType) {
        this.Type = DeployType;
    }

    public void SetServerName(String ServerName) {
        this.ServerNames.add(ServerName);
    }

    public void SetEnvironment(String Environment) {
        this.Environment = Environment;
    }

    public String getAppName() {
        return AppName;
    }

    public String getType() {
        return Type;
    }

    public List<String> getServerName() {
        return ServerNames;
    }

    public String getEnvironment() {
        return Environment;
    }

}

2voto

Bham503 Punkte 178

Ihre Ausnahme wird verursacht, weil Sie ServerNames in Ihrer Projektklasse nicht initialisiert haben. Versuchen Sie, es wie folgt zu initialisieren und führen Sie es erneut aus:

final protected List<String> ServerNames = new ArrayList<String>();

1voto

uzilan Punkte 2464

Wenn Ihre Xml-Datei mit einem Xsd-Schema erstellt wurde, können Sie stattdessen JAXB um mit dem xjc-Tool Klassen für sie zu erstellen. Das sollte Ihr Leben ein wenig einfacher machen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X