2012-05-05 15 views
0

JDOMパーサーを使用して、feedrinseを使用して作成したXMLを解析しています。JDOMを使用したXML解析が失敗する

XMLは次の場所にあります。http://www.feedrinse.com/services/rinse/?rinsedurl=396ac3b0142bb6360003c8dbac4f8d47

私のコードのすべてのタイトル、リンク、pubDateの要素を解析し、私はフロントエンドに送信しています新しいXMLに保存することです。ここに私のコードです:

String temp = "http://www.feedrinse.com/services/rinse/?rinsedurl=396ac3b0142bb6360003c8dbac4f8d47"; 
String XMLstr="<FEED>"; 

SAXBuilder builder = new SAXBuilder(); 
URL url= new URL(temp); 
Document doc = null;     
try{ 
    doc=builder.build(url);    
    Element root = doc.getRootElement(); 
    //List children = root.getChildren(); 
    List list = root.getChildren("item"); 
    XMLstr+="<children>"+list.size()+"</children>"; 
    for (int i = 0; i < list.size(); i++) { 
      Element node = (Element) list.get(i); 
      String title=node.getChildText("title").toString(); 
      XMLstr+="<title>"+title+"</title>"; 
      String link=node.getChildText("link").toString(); 
      XMLstr+="<link>"+link+"</link>"; 
      String desc=node.getChildText("description").toString(); 
      XMLstr+="<desc>"+desc+"</desc>"; 
      String pubDate=node.getChildText("pubDate").toString(); 
      XMLstr+="<pubDate>"+pubDate+"</pubDate>";   
     } 
    } 
catch(Exception e) 
    { 
    out.println(e); 
    } 
    XMLstr+="</FEED>"; 

しかし、それは正しく解析されていません。最初はいつも子供のサイズを0と表示しています。私は何をしているのか、どのように修正することができるかを提案してください。ありがとう。

答えて

1

XMLは、以下の構造を有する

<rss> 
    <channel> 
    ... 
    <item></item> 
    <item></item> 

例えばElement root = doc.getRootElement()の項目の子がないrss要素が返されます。

EDIT:。

List list = root.getChild("channel").getChildren("item"); 
+0

iが(root.getChildを使用することができます.... tooo物事が容易になり、以下の行を試してみてくださいGetChildrenメソッド( "アイテム")、その後? – CodeMonkey

+0

このアリも同様に動作します 'code'Element root = doc.getRootElement(); \t要素channel = root.getChild(); \t // List children = root.getChildren(); – CodeMonkey

+0

(動作確認済み) – erikxiv

0

JDOM2)は

public static void main(String[] args) throws MalformedURLException, JDOMException, IOException { 
    final URL url = new URL("http://www.feedrinse.com/services/rinse/?rinsedurl=396ac3b0142bb6360003c8dbac4f8d47"); 
    SAXBuilder sbuilder = new SAXBuilder(); 
    Document doc = sbuilder.build(url); 
    XPathExpression<Element> itemxp = XPathFactory.instance().compile("/rss/channel/item", Filters.element()); 

    Element feed = new Element("FEED"); 

    List<Element> items = itemxp.evaluate(doc); 
    Element kidcount = new Element("children"); 
    kidcount.setText("" + items.size()); 
    feed.addContent(kidcount); 
    for (Element item : items) { 

     addItem(feed, item, "title"); 
     addItem(feed, item, "link"); 
     addItem(feed, item, "description"); 
     addItem(feed, item, "pubDate"); 
    } 

    XMLOutputter xout = new XMLOutputter(Format.getPrettyFormat()); 

    //xout.output(doc, System.out); 
    xout.output(feed, System.out); 
} 

private static void addItem(Element feed, Element item, String name) { 
    Element emt = item.getChild(name); 
    if (emt == null) { 
     return; 
    } 
    feed.addContent(emt.clone()); 
} 
関連する問題