Разбор XML DOM Java - PullRequest
       1

Разбор XML DOM Java

2 голосов
/ 06 декабря 2011

Итак, у меня есть XML-файл в формате:

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

Я пытаюсь проанализировать этот файл и создать объект, который я могу заполнить JListBox именами и группой радиокнопок с разными серверами, однако каждый проект состоит из разного количества серверов. Как мне перебрать узлы / дочерние узлы, чтобы построить объект с несколькими серверами. Вот фрагменты кода, который я использую позаимствовал с веб-сайта, а некоторые из меня, и я еще не очень хорош в кодировании, так что терпите меня, пожалуйста. Когда я отлаживаю, он начинает анализировать и создавать объект, но как только он попадает на имена серверов, он печатает исключение нулевого указателя, поэтому я делаю что-то совершенно неправильно.

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


}

Ответы [ 2 ]

2 голосов
/ 06 декабря 2011

Ваше исключение вызвано тем, что вы не инициализировали ServerNames в своем классе Project.Попробуйте инициализировать его следующим образом и перезапустите:

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

1 голос
/ 06 декабря 2011

Если ваш xml был создан с использованием схемы xsd, вы можете вместо этого использовать JAXB для создания классов для него, используя инструмент xjc.Это должно немного облегчить вашу жизнь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...