2013-07-16 25 views
1

當我處於元素節點上時,如何簡化代碼混亂?我的代碼如下所示:以簡單的方式解析XML中的元素,dom4j

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


    } 

} 

我想這個例子中的更少的代碼:(非常混亂,並沒有完全清理代碼):

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()); 
    } 
+0

你會在不同的if-s中有不同的行爲,或者你總是會有相同的行爲,例如只是打印文本? – peshkira

+0

只需要解析所有元素,不要指定子元素。 –

回答

0

解決。

因此,沒有用戶推薦我回答,所以我找到了解決方案。

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; 

    } 

並抓住這樣一個數據:

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

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

XML結構:

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

希望這別人幫助。