разбиение файла xml с помощью java

‹? Xml version =" 1.0 "encoding =" utf-8 "? > ‹Rss xmlns: media =" http://search.yahoo.com/mrss/ "xmlns: ynews =" http://news.yahoo.com/rss/ "version =" 2.0 ">‹ канал>

‹Title> Заголовки новостей крикета | Новости крикета - Yahoo! Новости Индии ‹/ title>

‹Ссылка> http://in.news.yahoo.com/cricket/‹ / ссылка>

‹Описание> Ознакомьтесь с последними заголовками новостей о крикете с Yahoo! Новости Индии. Найдите главные статьи о крикете и подробное освещение новостей о крикете из Индии и всего мира. ‹/ Description>

‹Язык> en-IN‹ / язык>

‹Авторское право> Авторские права (c) 2011 Yahoo! Inc. Все права защищены ‹/ авторское право>

‹PubDate> 2011-04-06T15: 30: 02 + 05: 30‹ / pubDate>

‹Ttl> 5‹ / ttl>

‹Изображение>

‹Title> Заголовки новостей крикета | Новости крикета - Yahoo! Новости Индии ‹/ title>

‹Ссылка> http://in.news.yahoo.com/cricket/‹ / ссылка>

‹Url> http://l.yimg.com/os/mit/media/m/index/img/Yahoo_logo_en- IN.gif‹ / url>

‹/ Image>‹ item> ‹title> Беспокойный график истощит игроков, - говорит Дони‹ / title>

‹Description> Ченнаи, 6 апреля (PTI) ...‹ / description>

‹Ссылка> http://in.news.yahoo.com/hectic-schedule-drain-players-says-dhoni-20110406-023100-889.html‹ / ссылка>

‹PubDate> 2011-04-06T09: 31: 00Z‹ / pubDate>

‹Источник> PTI‹ / источник>

‹Guid isPermaLink =" false "> / hectic-schedule-сток-плееры-говорит-dhoni-20110406-023100-889.html‹ / guid>

‹/ Элемент>

‹Элемент>

‹Title> 27-28 апреля встретятся торговые секретари Индии и Пакистана‹ / title>

‹Описание> Нью-Дели, 6 апреля (PTI) ...‹ / description>

‹Ссылка> http://in.news.yahoo.com/india-pakistan-trade-secretaries-meet-april-27-28-20110406-023100-140.html‹ / ссылка>

Мне нужны только ЗАГОЛОВКИ из этого XML, то есть только между тегами ‹item>‹ title> MESSAGES ‹/ title>. Также необходимо печатать сообщения одно за другим непрерывно. как я могу это сделать.


person tr_tech    schedule 06.04.2011    source источник
comment
java-tips.org/java-se-tips/javax.xml.parsers/   -  person Nikola Yovchev    schedule 06.04.2011
comment
Вы хотите проанализировать RSS-канал? Ознакомьтесь с ответами на этот вопрос: stackoverflow.com/questions/113063/java-rss-library   -  person Anders Lindahl    schedule 06.04.2011


Ответы (3)


Я бы использовал javax.xml.xpath API, которые для этого включены в Java SE 5.

import java.io.FileReader;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

public class Demo {

    public static void main(String[] args) throws Exception {
        XPath xPath = XPathFactory.newInstance().newXPath();

        FileReader reader = new FileReader("input.xml");
        InputSource xml = new InputSource(reader);
        NodeList titleNodes = (NodeList) xPath.evaluate("//item/title", xml, XPathConstants.NODESET);

        for(int x=0; x<titleNodes.getLength(); x++) {
            System.out.println(titleNodes.item(x).getTextContent());
        }
    }

}
person bdoughan    schedule 06.04.2011
comment
Мне нужно читать живые данные каждые 5 минут и распечатывать их, как я могу это сделать. Я не могу сохранить их в файле. - person tr_tech; 07.04.2011
comment
@tr_tech - вы можете создать InputSource для любого типа InputStream или Reader. Вы также можете передавать другие типы ввода, такие как узлы DOM. - person bdoughan; 07.04.2011

Разберите файл, чтобы создать документ DOM. В этой модели DOM выберите все title элементы, и их текстовое содержимое является заголовками, которые вы ищете.

Быстрый пример с dom4j:

File xml = new File("input.xml");     // replace with your document
SAXReader reader = new SAXReader();
Document doc = reader.read(xml);
List titles = doc.selectNode("//item/title");  // a list of all title elements
for (Object obj:titles) 
   System.out.println(((Element) obj).getText());

Должен распечатать все заголовки на консоли

person Andreas Dolk    schedule 06.04.2011
comment
Используя стандартные библиотеки javax.xml.xpath, вам не нужно сначала материализовать XML как DOM: stackoverflow.com/questions/5566124/ - person bdoughan; 06.04.2011

Это то, что часто возникает. Для этого у меня есть отличный сценарий. Он доступен здесь.

https://github.com/ramanathanrv/utils/blob/master/groovy/split_xml.groovy

Использование: groovy split_xml.groovy ‹input_file_name› ‹no_of_pieces›

PS: Это не мой код. Я получил этот код откуда-то, но действительно забыл источник.

person Ram    schedule 06.04.2011