我正在使用JDOM解析器来解析使用feedrinse创建的XML。
XML位于:http://www.feedrinse.com/services/rinse/?rinsedurl=396ac3b0142bb6360003c8dbac4f8d47
我的代码是解析每个title,link,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.请建议我在做什么错误,我怎么能纠正这一点。感谢。
答案 0 :(得分:1)
XML具有以下结构
<rss>
<channel>
...
<item></item>
<item></item>
E.g。 Element root = doc.getRootElement()
将返回 rss 元素,该元素没有任何 item 子元素。
编辑:尝试以下行
List list = root.getChild("channel").getChildren("item");
答案 1 :(得分: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());
}