2015-04-05 83 views
1

时,我有以下XML:困难的内部变量解析XML

<fitness> 
<group id="1" name = "firstGroup"> 

    <exercises id="1" name = "exercise1"> 
     <implementation> Hw 
      </implementation> 
     <videoUrl> APGw5Xi8xfQ </videoUrl> 
    </exercises> 

    </group> 


    <group id = "2" name = "group2"> 

     <exercises id = "5" name = "exercise5"> 
      <implementation>just do it</implementation> 
      <videoUrl>let's see it</videoUrl> 
     </exercises> 

    </group> 

    <group id = "3" name = "group3"> 
     <exercises id = "6" name = "exercise6"> 
      <implementation>just do it</implementation> 
      <videoUrl>let's see it</videoUrl> 
     </exercises> 

    </group> 
</fitness> 

我需要大约一个组内的所有练习有关的信息。问题在于我无法获得关于一组练习的信息,我只能获得关于所有练习的信息,但我不需要它。

我的代码:

public void parseFile(InputStream file) throws Exception { 
     // Standart declaration for dom parser 

     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(file); 
     doc.getDocumentElement().normalize(); 


     NodeList group = doc.getElementsByTagName("group"); 
     for (int temp = 0; temp < group.getLength(); temp++) { 
      System.out.println("----------------------------"); 
      Node groupNode = group.item(temp); 
      Element groupElement = (Element) groupNode; 

      //Adding group name to the DB 

      addToMuscleGroupDb(groupElement.getAttribute("name")); 

      //FIXME I should take exercises which are inside current group 
      // But I take all exercises 

      String muscleGroupId = groupElement.getAttribute("id"); 
      NodeList exercises = doc.getElementsByTagName("exercises"); 

      for (int count = 0; count < exercises.getLength(); count++) { 
       Node exerciseNode = exercises.item(count); 
       Element eElement = (Element) exerciseNode; 

       //Adding exercises to DB 
       addToExercisesForGroupDb(muscleGroupId, eElement.getAttribute("name")); 
       System.out.println("Exercise :" + eElement.getAttribute("name") + ", id:"); 

       //Adding to individual exercise DB 
       String implementation = eElement.getElementsByTagName("implementation").item(0).getTextContent(); 
       String videoUrl = eElement.getElementsByTagName("videoUrl").item(0).getTextContent(); 
       String exerciseId = eElement.getAttribute("id"); 
       addToIndividualExerciseDb(implementation, exerciseId, videoUrl); 


      } 
     } 
    } 
    } 

输出是:

1 
Exercise :exercise1, id:1 
Exercise :exercise5, id:1 
Exercise :exercise6, id:1 
---------------------------- 
2 
Exercise :exercise1, id:2 
Exercise :exercise5, id:2 
Exercise :exercise6, id:2 
---------------------------- 
3 
Exercise :exercise1, id:3 
Exercise :exercise5, id:3 
Exercise :exercise6, id:3 

但我需要:

1 
Exercise :exercise1, id:1 
---------------------------- 
2 
Exercise :exercise5, id:2 
---------------------------- 
3 
Exercise :exercise6, id:3 

回答

1

相反的NodeList exercises = doc.getElementsByTagName("exercises");,你应该使用NodeList exercises = groupElement.getElementsByTagName("exercises");

这样,您将只能在<group>内检索<exercices>

+0

谢谢,很好的回答! – 2015-04-05 18:53:20