使用java分割xml文件

问题描述:

<?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”> <频道>使用java分割xml文件

< title>板球新闻标题|板球新闻 - 雅虎新闻印度</TITLE>

<链接> http://in.news.yahoo.com/cricket/ < /链接>

<说明>查看从雅虎最新的板球新闻头条新闻印度。查找*板球故事和 来自印度和世界各地的板球新闻的深度报道。 < /说明>

<语言> EN-IN < /语言>

<版权>版权所有(C)2011雅虎Inc.版权所有< /版权>

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

< TTL> 5 </TTL>

<图片>

< title>板球新闻标题|板球新闻 - 雅虎新闻印度</TITLE>

<链接> http://in.news.yahoo.com/cricket/ < /链接>

<网址> http://l.yimg.com/os/ MIT /媒体/ M /索引/ IMG/Yahoo_logo_en- IN.gif </URL>

< /图像> <项目> <标题>繁忙的日程会流失玩家,说的Dhoni </TITLE>

<描述>奈,4月6日(PTI)... < /描述>

<链路> 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 =”假“> /繁忙的时间表漏播放器-说,DHO NI-20110406-023100-889。HTML </GUID>

< /项目>

<项目>

<标题>印度,巴基斯坦贸易秘书满足于4月27日至28日</TITLE>

<说明>新德里4月6日电(PTI)... </description>

<链接> http://in.news.yahoo.com/ind IA - 巴基斯坦 - 贸易书记强相遇,四月27-28-20110406-023100-140.html < /链接>

我只想从这个XML的头条新闻,这只是间<项目> <标题>消息</title>标签。还必须连续打印信息。我怎样才能做到这一点。

+0

http://www.java-tips.org/java-se-tips/javax.xml.parsers/how-to-read-xml-file-in-java.html – 2011-04-06 12:15:17

+0

您想解析RSS提要?看看这个问题的答案:http://*.com/questions/113063/java-rss-library – 2011-04-06 12:16:36

我会使用包含在Java SE 5中的javax.xml.xpath API。

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分钟的实时数据并打印它,我该怎么做,我不能能够将其存储在文件中。 – 2011-04-07 04:27:07

+0

@tr_tech - 您可以在任何类型的InputStream或Reader上创建InputSource。您还可以传递其他输入类型,如DOM节点。 – 2011-04-07 14:12:11

解析文件以创建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:http://*.com/questions/5566124/splitting-up-of-xml-file-using-java/5566161 #5566161 – 2011-04-06 13:15:57

这是一件经常出现。我有一个groovy脚本来做到这一点。它在这里可用。

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

用法:常规split_xml.groovy <input_file_name> <no_of_pieces>

PS:这不是我的代码。我从某个地方得到了这段代码,但真的忘了源代码。