разделение XML-файла с использованием Java

1

<? 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" > < канал >

< название > Новости крикета | Новости крикета - Yahoo! Новости Индия </Название >

< ссылкa > http://in.news.yahoo.com/cricket/</Ссылкa >

< описание > Ознакомьтесь с последними заголовками новостей Cricket от Yahoo! Новости Индия. Найдите лучшие истории крикета и углубленное освещение Новости крикета из Индии и по всему миру./Описание >

< язык > ен-IN </Язык >

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

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

< ТТЛ > 5 </ТТЛ >

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

< название > Новости крикета | Новости крикета - Yahoo! Новости Индия </Название >

< ссылкa > http://in.news.yahoo.com/cricket/</Ссылкa >

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

</Изображение > < Пункт > <title> График Hectic истощает игроков, говорит Dhoni </Название >

< описание > Ченнаи, 6 апреля (PTI)... </Описание >

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

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

< источник > ПТИ </Источник >

< guid isPermaLink = "false" > /hectic-schedule-drain-players-says-dhoni-20110406-023100-889.html </GUID>

</Элемент >

< пункт >

<title> Индия, Пакистанские торговые секретари проведут встречу 27-28 апреля,/Название >

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

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

Я хочу только HEADLINES из этого XML, который находится только между < Пункт > < Название > СООБЩЕНИЙ </title> . Также необходимо печатать сообщение один за другим непрерывно. как я могу это сделать.

Теги:
split

3 ответа

4
Лучший ответ

Я бы использовал 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());
        }
    }

}
  • 0
    Я должен читать живые данные каждые 5 минут и распечатывать их, как я могу это сделать. Я не могу сохранить их в файле.
  • 0
    @tr_tech - Вы можете создать InputSource для любого типа InputStream или Reader. Вы также можете передавать другие типы ввода, такие как DOM-узлы.
1

Разберите файл для создания документа 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());

Чтобы напечатать все заголовки на консоли

  • 0
    Используя стандартные библиотеки javax.xml.xpath, вам не нужно сначала материализовать XML как DOM: stackoverflow.com/questions/5566124/…
0

Это то, что часто возникает. У меня есть groovy script. Он доступен здесь.

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню