Синтаксический анализ XML с использованием DOM - PullRequest
0 голосов
/ 07 ноября 2011

У меня есть XML со следующими данными ...

<movies total="3"> 
<movie cover="9_pro.jpg" Title="A Very " MovieDuration="1.29" showtime="2:50 PM"         theatre="UV3"/>
<movie cover="5_pro.jpg" Title="Par" MovieDuration="1.24" showtime=" 12:00 PM"     theatre="University Village 3"/>
<movie cover="8_pro.jpg" Title="PinBts" MovieDuration="1.30" showtime="9:20 PM" theatre="University Village 3"/>
</movies>

Я хочу проанализировать это с помощью анализатора JDOM в сервлете ... Я использовал следующий код:

    try 
    {
    doc=builder.build(url);     
    Element root = doc.getRootElement();
    List children = root.getChildren();     
    out.println(root);  

    for (int i = 0; i < children.size(); i++) 
        {
            Element movieAtt = doc.getRootElement().getChild("movie");      
            //out.println(movieAtt.getAttributeValue( "cover" ));
            out.println(movieAtt.getAttributeValue( "Title" ));
            //out.println(movieAtt.getAttributeValue( "MovieDuration" ));
            //out.println(movieAtt.getAttributeValue( "showtime" ));
            //out.println(movieAtt.getAttributeValue( "theatre" ));
        }   

    }

Однако мой код возвращает значения для первого дочернего элемента root несколько раз. Я предполагаю, что это потому, что у меня есть все 3 дочерних имени только как «фильм».

Так что я хочу различить их и сделать подсчет для следующего дочернего фильма с такими атрибутами, как Title = "par" и т. Д.

Давно выяснял это, но не мог найти. Помощь будет действительно ощутимой

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

У вас не работает, потому что, хотя вы зацикливаетесь 3 раза, вы всегда выбираете один и тот же (первый) узел через:

Element movieAtt = doc.getRootElement().getChild("movie"); 

Попробуйте это: (Непроверенные)

    Element root = doc.getRootElement();
    List children = root.getChildren();     
    out.println(root);  
    if (children != null)
    {
       for (Element child : children) 
       {
         out.println(child.getAttributeValue( "Title" ));
       }
    } 
0 голосов
/ 07 ноября 2011

Лучший способ - получить атрибут из списка children вместо повторного запроса movieAtt.

Я никогда не использовал JDOM, но мой псевдокод будет выглядеть следующим образом:

for (int i = 0; i < children.size(); i++) {
    Element e = children.get(i);
    String title = e.getAttributeValue("Title");
}
...