我想阅读Feed条目,我现在只是被卡住了。以此为例:https://stackoverflow.com/feeds/question/2084883假设我想读取文档中每个入口节点内的所有摘要节点值。我怎么做?我已经改变了许多代码变体,这个变量最接近我想要实现的目标:
Element entryPoint = document.getRootElement();
Element elem;
for(Iterator iter = entryPoint.elements().iterator(); iter.hasNext();){
elem = (Element)iter.next();
System.out.println(elem.getName());
}
它通过xml文件中的所有节点并写入其名称。现在我想做的是
if(elem.getName().equals("entry"))
只获取入口节点,如何获取入口节点的元素,以及如何让我们说汇总及其值? TNX
问题:如何从this链接获取摘要节点的值
答案 0 :(得分:2)
要获取xml元素的所有子元素,您可以执行
SAXBuilder sb = new SAXBuilder();
StringReader sr = new StringReader(xmlDocAsString);
Document doc = sb.build(sr);
Element root = doc.getRootElement();
List l = root.getChildren("entry");
for (Iterator iter = l.iterator(); iter.hasNext();) {
...//do whatever...
}
答案 1 :(得分:1)
if(elem.getName() == "entry")
我不知道这是不是你的问题(你没有说明你的问题是什么),但从不用--
测试字符串相等性。相反,请使用equals()
:
if(elem.getName().equals("entry"))
答案 2 :(得分:1)
以下是使用vanilla Java的方法:
//read the XML into a DOM
StreamSource source = new StreamSource(new StringReader("<theXml></theXml>"));
DOMResult result = new DOMResult();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(source, result);
Node root = result.getNode();
//make XPath object aware of namespaces
XPath xpath = XPathFactory.newInstance().newXPath();
xpath.setNamespaceContext(new NamespaceContext(){
@Override
public String getNamespaceURI(String prefix) {
if ("atom".equals(prefix)){
return "http://www.w3.org/2005/Atom";
}
return null;
}
@Override
public String getPrefix(String namespaceURI) {
return null;
}
@Override
public Iterator getPrefixes(String namespaceURI) {
return null;
}
});
//get all summaries
NodeList summaries = (NodeList) xpath.evaluate("/atom:feed/atom:entry/atom:summary", root, XPathConstants.NODESET);
for (int i = 0; i < summaries.getLength(); ++i) {
Node summary = summaries.item(i);
//print out all the attributes
for (int j = 0; j < summary.getAttributes().getLength(); ++j) {
Node attr = summary.getAttributes().item(j);
System.out.println(attr.getNodeName() + "=" + attr.getNodeValue());
}
//print text content
System.out.println(summaries.item(i).getTextContent());
}
答案 3 :(得分:0)
有点晚了,但对人们谷歌搜索可能有用......
有一个专门的API用于处理Java中的RSS和Atom提要。它叫罗马,可以在这里找到:
http://java.net/projects/rome/
这非常有用,无论RSS或Atom版本如何,都可以轻松阅读。您也可以使用它构建源并生成XML,但我没有使用此功能的经验。
这是一个简单的示例,它读取Feed并打印出Feed中所有条目的描述节点:
URL feedSource = new URL("http://....");
feed = new SyndFeedInput().build(new XmlReader(feedSource));
List<SyndEntryImpl> entries = (List<SyndEntryImpl>)feed.getEntries();
for(SyndEntryImpl entry : entries){
System.out.println(entry.getDescription().getValue());
}
足够简单。