0

ノード内のノード値を取得する必要があります。しかし、他のノードから同じノードタイプの値を取得することになります。

これは私のxml構造です(サンプル)

    <Hello>
    <Morning>
    <hr>8</hr>
    <min>12</min>
    <sec>25</sec>
    <Food>
    <fooditem>
    <main>Burger</main>
    <drink>milk</drink>
    <fruit>banana</fruit>
    </fooditem>

    <fooditem>
    <main>Toast</main>
    <drink>butter milk</drink>
    <fruit>banana and apple</fruit>
    </fooditem>
    </Food>
    </Morning>
    <Evening>
 <hr>15</hr>
    <min>12</min>
    <sec>25</sec>
     <Food>
    <fooditem>
    <main>Burger</main>
    <drink>milk</drink>
    <fruit>banana</fruit>
    </fooditem>
 </Food>
    </Evening>
    <Evening>
<hr>15</hr>
    <min>12</min>
    <sec>25</sec>
     <Food>
    <fooditem>
    <main>Burger</main>
    <drink>milk</drink>
    <fruit>banana</fruit>
    </fooditem>
<fooditem>
    <main>Burger</main>
    <drink>milk</drink>
    <fruit>banana</fruit>
    </fooditem>
 </Food>
    </Evening>
    <Evening>
<hr>15</hr>
    <min>12</min>
    <sec>25</sec>
     <Food>
    <fooditem>
    <main>Burger</main>
    <drink>milk</drink>
    <fruit>banana</fruit>
    </fooditem>
 </Food>
    </Evening>

    </Hello>

問題は、XML から値を取得できることです。しかし、私のコードが行うことは、他のすべてのノードからすべての食品の値を取得することです。朝の食事の値を取得し、次に夕方、次に夕方の値を順番に取得する必要があります。

私のコード

File fXmlFile = new File("c://food.xml");
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
     Document doc = dBuilder.parse(fXmlFile);
     doc.getDocumentElement().normalize();

     System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

     NodeList nList = doc.getElementsByTagName("fooditem");


     System.out.println("----------------------------");

     for (int temp = 0; temp < nList.getLength(); temp++) {

         Node nNode = nList .item(temp);


     if (nNode.getNodeType() == Node.ELEMENT_NODE) {

             Element eElement = (Element) nNode;
             System.out.println("main: " + eElement.getElementsByTagName("main").item(0).getTextContent());
             System.out.println("drink: " + eElement.getElementsByTagName("drink").item(0).getTextContent());
             System.out.println("fruit: " + eElement.getElementsByTagName("fruit").item(0).getTextContent());
         }
     }

出力: 現在:

    Burger    
    milk    
    banana    Toast    
    butter milk    
    banana and apple    
    Burger    
    milk    
    banana    
    Burger    
    milk    
    banana    
    Burger    
    milk    
    banana 


    Burger    
    milk    
    banana    Toast    
    butter milk    
    banana and apple    
    Burger    
    milk    
    banana    
    Burger    
    milk    
    banana    
    Burger    
    milk    
    banana  



    Burger    
    milk    
    banana    Toast    
    butter milk    
    banana and apple    
    Burger    
    milk    
    banana    
    Burger    
    milk    
    banana    
    Burger    
    milk    
    banana

期待される出力:

    Burger    
milk    
banana    
Toast    
butter
milk    
banana and apple    
Burger    
milk    
banana    
Burger    
milk    
banana    
Burger    
milk    
banana 

期待される出力は、モーニング タグのみに属する fooditem 子ノードを取得する必要があり、イブニング タグから取得する必要がある子ノードを取得する場合です。毎晩と朝の現在では、食品からすべての値を取得し、再びすべての値を取得します

4

1 に答える 1

0

これを試して:

     System.out.println("----------------------------");
     NodeList nList = doc.getElementsByTagName("fooditem");

     for (int temp = 0; temp < nList.getLength(); temp++) {

         Node nNode = nList .item(temp);


     if (nNode.getNodeType() == Node.ELEMENT_NODE) {

             Element eElement = (Element) nNode;

             NodeList children = eElement.getChildNodes();

             for(int i=0;i<children.getLength();i++){
                 Node item = children.item(i);

                 System.out.println(item.getTextContent());


             }


         }
     }
于 2015-04-09T06:22:49.270 に答える