簡體   English   中英

解析xml時內部標簽的難點

[英]Difficulties with internal tags when parsing 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

代替NodeList exercises = doc.getElementsByTagName("exercises"); ,則應使用NodeList exercises = groupElement.getElementsByTagName("exercises");

這樣,您將只檢索<group> <exercices> <group>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM