使用DOM解析XML

时间:2011-11-07 12:09:17

标签: java xml parsing jdom

我有一个包含以下数据的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>

我想在servlet中使用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次。我认为这是因为我只有3个孩子的名字作为“电影”。

所以我想区分这些,并使用Title =“par”等属性计算下一部电影的孩子。

已经弄清楚了这么久但却找不到。帮助真的很明显

2 个答案:

答案 0 :(得分:1)

你的工作没有用,因为即使你循环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" ));
       }
    } 

答案 1 :(得分:0)

最好的方法是从children列表中获取属性,而不是再次要求movieAtt

我从未使用过JDOM,但我的伪代码如下:

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