3

フィードエントリを読みたいのですが、今は行き詰まっています。これを例に取ってみましょう: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

質問:このリンクからサマリーノードの値を取得する方法

4

4 に答える 4

2

jdomを試しましたか?シンプルで便利だと思います。

http://www.jdom.org/

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...
}
于 2010-05-13T15:03:05.223 に答える
1
if(elem.getName() == "entry")

これがあなたの問題であるかどうかはわかりませんが(あなたは実際にあなたの問題が何であるかを述べていません)、文字列の同等性を。でテストすることは決してありません--。代わりに、:を使用してequals()ください

if(elem.getName().equals("entry"))
于 2010-05-13T15:32:05.570 に答える
1

バニラ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());
}
于 2010-05-14T17:44:22.483 に答える
0

少し遅いですが、グーグルする人には便利かもしれません...

JavaでRSSおよびAtomフィードを処理するための専用APIがあります。それはローマと呼ばれ、ここで見つけることができます:

http://java.net/projects/rome/

RSSやAtomのバージョンに関係なく、フィードを読みやすくするのは非常に便利です。この機能の経験はありませんが、フィードを作成してXMLを生成することもできます。

フィードを読み取り、フィード内のすべてのエントリの説明ノードを出力する簡単な例を次に示します。

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());
}

十分に単純です。

于 2011-07-13T22:29:05.200 に答える