Question

How can I simplify a mess of code when I'm on node of elements? My code looks like:

private void readXmldata(String xml_debug_settings)
{
    File xml_debug_settings_file = new File(xml_debug_settings);

    if (xml_debug_settings_file.exists())
    {            
        SAXReader saxReader = new SAXReader();

        try {

            Document document = saxReader.read(xml_debug_settings_file);

            Element root = document.getRootElement();

            Iterator itr = root.elements().iterator();  

            Element element =null;

            while (itr.hasNext()) {  

                Element debel = (Element) itr.next();

                if (debel.getName().equals("mainnode")) { 

                    Iterator itrd = debel.elementIterator();

                    while (itrd.hasNext())
                    {
                        Element child = (Element) itrd.next();

                        System.out.println(child.getName());

                        if (child.getName().equals("node1"))
                        {
                            System.out.println(child.getText());
                        }

                        if (child.getName().equals("node2"))
                        {
                            System.out.println(child.getText());
                        }

                        if (child.getName().equals("node3"))
                        {
                            System.out.println(child.getText());
                        }

                        if (child.getName().equals("node4"))
                        {
                            System.out.println(child.getText());
                        }

                        if (child.getName().equals("node4"))
                        {
                            System.out.println(child.getText());
                        }

                        if (child.getName().equals("node5"))
                        {
                            System.out.println(child.getText());
                        }
                    }

               }  

            }  

        } catch (DocumentException ex) {
            Logger.getLogger(Debugsettings.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

}

I want less code of this example: (very mess and not properly clean a code):

    if (child.getName().equals("node1"))
    {
        System.out.println(child.getText());
    }

    if (child.getName().equals("node2"))
    {
        System.out.println(child.getText());
    }

    if (child.getName().equals("node3"))
    {
        System.out.println(child.getText());
    }

    if (child.getName().equals("node4"))
    {
        System.out.println(child.getText());
    }

    if (child.getName().equals("node4"))
    {
        System.out.println(child.getText());
    }

    if (child.getName().equals("node5"))
    {
        System.out.println(child.getText());
    }
Was it helpful?

Solution

Solved.

So, none of users recommend me for answer so I found solution.

public Map<String, String> readXmldata(String xml_debug_settings, String node)
    {

        File xml_debug_settings_file = new File(xml_debug_settings);

        if (xml_debug_settings_file.exists())
        {            
            SAXReader saxReader = new SAXReader();

            try {

                Document document = saxReader.read(xml_debug_settings_file);

                //Document temp = DocumentHelper.parseText("");  

                Element root = document.getRootElement();

                Iterator itr = root.elements().iterator();  

                Element element = null;

                while (itr.hasNext()) {  

                    Element debel = (Element) itr.next();

                    // System.out.println(debel.getName());    // node_name_1

                    if (debel.getName().equals(node)) { 

                        Iterator itrd = debel.elementIterator();

                        while (itrd.hasNext())
                        {
                            Element child = (Element) itrd.next();
                            String name = child.getName();  // node_name_2

                            int nodecount = child.nodeCount();

                            for (int i=0; i<nodecount; i++)
                            {
                                xmlarray.put(name, child.getStringValue());
                            }
                        }

                        return this.xmlarray;
                   }
                }  

            } catch (DocumentException ex) {
                Logger.getLogger(Debugsettings.class.getName()).log(Level.SEVERE, null, ex);
            }


        }
        else
        {
            JOptionPane.showMessageDialog(null, "Not exists:"  + xml_debug_settings, "Failed to open xml", JOptionPane.WARNING_MESSAGE);
        }
        return null;

    }

And grab a data like this:

Map<String, String> arrayList = xmlparser.readXmldata(this.xml_debug_settings, "someconfig");

System.out.prinln(arrayList.get("config1"));

Xml structure:

<document>
 <someconfig>
   <config1>value_of_config</config>
 </someconfig>
</document>

Hope this someone to help.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top