思路:
1 用程序去访问 web service 服务.返回 xml文件。
2 用dom 去解析xml
3 用解析后的数据 生成 html文件
访问web service 的代码
把xml解析成int[]
提取电视节目的代码
提取湖北省的所以电视节目
把数据转换成html的代码
//这里是原始的代码,需要好好整理整理。最好用soap
1 用程序去访问 web service 服务.返回 xml文件。
2 用dom 去解析xml
3 用解析后的数据 生成 html文件
访问web service 的代码
- public class StaticHTMLFile{
- public static boolean PrintPage(String page, String url_addr) {
- URL url;
- String rLine = null;
- PrintWriter fileOut = null;
- InputStream ins = null;
- File file=new File(page.trim());
- try {
- url = new URL(url_addr);
- ins = url.openStream();
- BufferedReader bReader = new BufferedReader(new InputStreamReader(ins,
- "utf-8"));//获取编码为utf-8的文件
- file.createNewFile();
- FileOutputStream out = new FileOutputStream(file);
- OutputStreamWriter writer = new OutputStreamWriter(out, "utf-8");
- fileOut = new PrintWriter(writer);
- //循环取取数据,并写入目标文件中
- while ( (rLine = bReader.readLine()) != null) {
- String tmp_rLine = rLine;
- int str_len = tmp_rLine.length();
- if (str_len > 0) {
- fileOut.println(tmp_rLine);
- fileOut.flush();
- }
- tmp_rLine = null;
- }
- url = null;
- return true;
- } catch (IOException e) {
- System.out.println("error: " + e.getMessage());
- e.printStackTrace();
- return false;
- } catch (Exception es) {
- System.out.println(es.getMessage());
- return false;
- }
- finally {//关闭资源
- fileOut.close();
- try {
- ins.close();
- } catch (IOException ex){
- //关闭输入流出错
- ex.printStackTrace();
- }
- }
- }
- }
把xml解析成int[]
- public class DomXml2Int {
- String fileName=null;//xml的文件
- String tagName=null;//要提取的xml中标签的名字
- public String getFileName() {
- return fileName;
- }
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
- public String getTagName() {
- return tagName;
- }
- public void setTagName(String tagName) {
- this.tagName = tagName;
- }
- public List<Integer> builder() throws ParserConfigurationException, SAXException, IOException{
- List<Integer> ids=null;
- ids=new ArrayList<Integer>();
- DocumentBuilderFactory dbf=null;
- DocumentBuilder db=null;
- Document d=null;
- NodeList nl=null;
- Node n=null;
- dbf=DocumentBuilderFactory.newInstance();
- db=dbf.newDocumentBuilder();
- d=db.parse(fileName);
- nl=d.getElementsByTagName(tagName);
- //循环取出每个Node的值
- for(int i=0;i<nl.getLength();i++){
- n=nl.item(i);//得到每个node
- //System.out.println(n.getTextContent());
- ids.add(Integer.valueOf(n.getTextContent()));
- }
- return ids;
- }
- }
提取电视节目的代码
- public class DomXml2String {
- /**
- * @param args
- * @throws ParserConfigurationException
- * @throws IOException
- * @throws SAXException
- */
- public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
- System.out.println(new DomXml2String().builder("tt.xml")[0]);
- System.out.println(new DomXml2String().builder("tt.xml")[1]);
- }
- //解析xml到数组中去
- public String[] builder( String xmlFilePath ) throws ParserConfigurationException, SAXException, IOException{
- String[] tvShow= new String[2];
- StringBuffer tvShowTempAM=new StringBuffer();
- StringBuffer tvShowTempPM=new StringBuffer();
- DocumentBuilderFactory dbf=null;
- dbf=DocumentBuilderFactory.newInstance();
- DocumentBuilder db=null;
- db=dbf.newDocumentBuilder();
- Document d=null;
- d=db.parse(new File(xmlFilePath));
- NodeList n=null;
- n=d.getElementsByTagName("tvProgramTable");
- Node node=null;
- //循环得到每个节点的值
- for(int i=0;i<n.getLength();i++){
- node=n.item(i);
- //System.out.println(i+node.getChildNodes().item(3).getTextContent() );
- if(node.getChildNodes().item(3).getTextContent().equals("AM")){
- //System.out.println(i+" is am" );
- tvShowTempAM.append(node.getChildNodes().item(1).getTextContent()+""+node.getChildNodes().item(5).getTextContent()+"<br>");
- }else{
- // System.out.println(i+" is pm" );
- tvShowTempPM.append(node.getChildNodes().item(1).getTextContent()+""+node.getChildNodes().item(5).getTextContent()+"<br>");
- }
- }
- tvShow[0]="AM\n"+tvShowTempAM.toString();
- tvShow[1]="PM\n"+tvShowTempPM.toString();
- return tvShow;
- }
- }
提取湖北省的所以电视节目
- public class TVRequestWebServiceTest {
- /**
- * @param args
- * @throws IOException
- * @throws SAXException
- * @throws ParserConfigurationException
- * @throws TemplateException
- */
- public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TemplateException {
- List<Integer> dstIds=null;
- List<Integer> pdIds=null;
- String[] tvShow= new String[2];
- //根据省的id得到省的所有电视台的id(数据保存到dstIds.xml)
- StaticHTMLFile.PrintPage("E:/workspace/spring2Test/dstIds.xml",
- "http://www.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx/getTVstationDataSet?theAreaID=17 "
- );
- //根据dstIds.xml得到电视台的id(int)
- DomXml2Int dxi=null;
- dxi=new DomXml2Int();
- dxi.setFileName("dstIds.xml");
- dxi.setTagName("tvStationID");
- dstIds=dxi.builder();
- DomXml2String dx=null;
- dx=new DomXml2String();
- String2Html s2h=null;
- //循环每个电视台得到每个电视的所以频道id
- for(int i=0;i<dstIds.size();i++){
- StaticHTMLFile.PrintPage("E:/workspace/spring2Test/pdIds" +
- "_" +
- dstIds.get(i) +
- ".xml",
- "http://www.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx/getTVchannelDataSet?theTVstationID=" +
- dstIds.get(i)
- );
- dxi.setFileName("pdIds_"+dstIds.get(i)+".xml");
- dxi.setTagName("tvChannelID");
- pdIds=dxi.builder();//获得每个电视台的所以频道id
- //测试
- /*for(int j=0;j<pdIds.size();j++){
- System.out.println(dstIds.get(i)+":"+pdIds.get(j));
- }
- //测试成功
- */
- //循环每个频道得到频道的电视节目
- for(int j=0;j<pdIds.size();j++){
- StaticHTMLFile.PrintPage("E:/workspace/spring2Test/pdIds" +
- "_" +
- dstIds.get(i)+
- "_" +
- pdIds.get(j)
- +
- ".xml",
- "http://www.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx/getTVprogramDateSet?theTVchannelID=" +
- pdIds.get(j)+
- "&theDate=" +
- "2009-02-20" +
- "&userID="
- );
- tvShow= dx.builder("pdIds_"+dstIds.get(i)+"_"+pdIds.get(j)+".xml");
- //测试 tvShow
- /*System.out.println(tvShow[0]);
- System.out.println(tvShow[1]);
- *测试成功
- AM
- 07:00晨曲
- 07:03重播:美嘉购物
- 14:00重播:都市商报
- 14:30重播:美嘉购物
- PM
- 18:15元富财经
- 18:37都市商报
- 19:09股海罗盘
- 19:30湖北新闻联播
- 19:51天气预报
- 19:55直播:美嘉购物
- 23:55重播:美嘉购物
- 02:00夜曲
- *
- *
- */
- //把tvshow的数据输出到html()
- s2h.builderHtml(tvShow, dstIds.get(i), pdIds.get(j));
- }
- }
- }
- }
把数据转换成html的代码
- public class String2Html {
- public static void builderHtml(String[] strS,int i,int j) throws IOException, TemplateException{
- //初始化freeMarker
- File file=null;
- file=new File("E:\\workspace\\spring2Test\\htmlTest\\");
- Configuration cf=null;
- cf=new Configuration();
- cf.setDirectoryForTemplateLoading(file);
- Template template=null;
- template=cf.getTemplate("tvShow.ftl");
- Map<String,String[]> root=null;
- root=new HashMap<String,String[]>();
- root.put("tvShow", strS);
- Writer out=null;
- //下面的文件名: 电视台id_频道id_时间.html
- out=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("E:/workspace/spring2Test/htmlTest/"+i+"_"+j+"_"+".html")),"utf-8"));
- template.process(root, out);
- }
- }
//这里是原始的代码,需要好好整理整理。最好用soap