有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java DOM XML解析

我有一个XML文件,格式如下:

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

我试图解析这个文件并构建一个对象,我可以用名称填充一个JListBox,用不同的服务器填充一个radiobutton组,但是每个项目由不同数量的服务器组成。如何迭代节点/子节点来构建具有多个服务器的对象。这里是我从一个网站上借用的代码片段,还有一些是我自己的,我还不太擅长编码,所以请耐心听我说。当我调试时,它开始解析&;构建对象,但一旦它到达服务器名称,它就会打印一个空指针异常,所以我做了一些完全错误的事情

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;
    }


}

共 (1) 个答案

  1. # 1 楼答案

    如果xml是使用xsd模式创建的,那么可以使用JAXB来创建类,使用xjc工具。这会让你的生活更轻松