使用java拆分xml文件

时间:2011-04-06 12:12:28

标签: java xml split

  

< ?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”> <频道>

     

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

     

&LT;链路&GT; HTTP://in.news.yahoo.com/cricket/< /链路&GT;

     

&LT;说明&gt;查看Yahoo!最新的Cricket新闻标题。新闻印度。查找顶级板球故事和深入报道   来自印度和世界各地的板球新闻。&lt; /描述&GT;

     

&LT;语言&GT;恩-IN&LT; /语言&GT;

     

&LT;版权所有&gt;版权所有(c)2011 Yahoo!保留所有权利&lt; /版权&GT;

     

&LT; pubdate的&GT; 2011-04-06T15:30:02 + 05:30℃; / pubdate的&GT;

     

&LT; TTL→5&LT; / TTL&GT;

     

&LT;图像&gt;

     

&LT;标题&gt;板球新闻标题|板球新闻 - 雅虎!新闻印度&lt; /标题&GT;

     

&LT;链路&GT; HTTP://in.news.yahoo.com/cricket/< /链路&GT;

     

&LT; URL&GT; HTTP://l.yimg.com/os/mit/media/m/index/img/Yahoo_logo_en-   IN.gif&LT; / URL&GT;

     

&LT; /图像&gt;   &LT;项&GT;&LT; Dhoni&lt; dhoni&lt; Dhoni&lt; Dhoni&lt; Dhoni&lt; Dhoni&lt; /标题&GT;

     

&LT;描述&gt; Chennai,4月6日(PTI)......&lt; /描述&GT;

     

&LT;链路&GT; HTTP://in.news.yahoo.com/hectic-schedule-drain-players-says-dhoni-20110406-023100-889.html< /链路&GT;

     

&LT; pubdate的&GT; 2011-04-06T09:31:00Z&LT; / pubdate的&GT;

     

&LT;源&GT; PTI&LT; /源&GT;

     

&LT; guid isPermaLink =“false”&gt; /hectic-schedule-drain-players-says-dhoni-20110406-023100-889.html< / GUID&GT;

     

&LT; /项目&GT;

     

&LT;项&GT;

     

&LT;标题&gt;印度,巴基斯坦贸易部长将于4月27日至28日举行会议&lt; /标题&GT;

     

&LT;描述&gt;新德里,4月6日(PTI)......&lt; /描述&GT;

     

&LT;链路&GT; HTTP://in.news.yahoo.com/india-pakistan-trade-secretaries-meet-april-27-28-20110406-023100-140.html< /链路&GT;

我只想要来自这个XML的HEADLINES,它只在&lt;项&GT;&LT;标题&GT;邮件&LT; /标题&GT;标签。还必须一个接一个地打印消息。我怎样才能做到这一点。

3 个答案:

答案 0 :(得分:4)

我会使用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());
        }
    }

}

答案 1 :(得分: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());

应将所有标题打印到控制台

答案 2 :(得分:0)

这是经常出现的事情。我有一个groovy脚本来做到这一点。它可以在这里找到。

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

用法:groovy split_xml.groovy&lt; input_file_name&gt; &LT; no_of_pieces&GT;

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