2015-04-09 3 views
0

Мне нужно получить значения узлов внутри узла. Но я получаю значения одного и того же типа узлов из других узлов.Как получить только узел внутри другого узла в xml с использованием DOM-парсера в Java

Это моя структура 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 

ожидаемый выход, когда он получает ChildNodes itshould получить fooditem childnode принадлежность к только утренний тег, и он должен получить от вечернего тега. В течении каждого вечера, а утром он получает все значения из пищевого продукта и снова получает все значения

+0

Я не совсем уверен, что вы хотите. Не могли бы вы изменить свой вопрос, чтобы показать свой текущий результат и ваш желаемый результат? – dbank

ответ

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


      } 


     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^