当前位置:  编程技术>python

使用python解析xml成对应的html示例分享

    来源: 互联网  发布时间:2014-10-04

    本文导语:  SAX将dd.xml解析成html。当然啦,如果得到了xml对应的xsl文件可以直接用libxml2将其转换成html。 代码如下:#!/usr/bin/env python # -*- coding: utf-8 -*-#---------------------------------------#   程序:XML解析器#   版本:01.0#   作者:mupeng#   日...

SAX将dd.xml解析成html。当然啦,如果得到了xml对应的xsl文件可以直接用libxml2将其转换成html。

代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#---------------------------------------
#   程序:XML解析器
#   版本:01.0
#   作者:mupeng
#   日期:2013-12-18
#   语言:Python 2.7
#   功能:将xml解析成对应的html
#   注解:该程序用xml.sax模块的parse函数解析XML,并生成事件
#   继承ContentHandler并重写其事件处理函数
#   Dispatcher主要用于相应标签的起始、结束事件的派发
#---------------------------------------
from xml.sax.handler import ContentHandler
from xml.sax import parse

class Dispatcher:
    def dispatch(self, prefix, name, attrs=None):
        mname = prefix + name.capitalize()
        dname = 'default' + prefix.capitalize()
        method = getattr(self, mname, None)
        if callable(method): args = ()
        else:
            method = getattr(self, dname, None)
            #args = name
        #if prefix == 'start': args += attrs
        if callable(method): method()

    def startElement(self, name, attrs):
        self.dispatch('start', name, attrs)

    def endElement(self, name):
        self.dispatch('end', name)

class Website(Dispatcher, ContentHandler):

    def __init__(self):
        self.fout = open('ddt_SAX.html', 'w')
        self.imagein = False
        self.desflag = False
        self.item = False
        self.title = ''
        self.link = ''
        self.guid = ''
        self.url = ''
        self.pubdate = ''
        self.description = ''
        self.temp = ''
        self.prx = ''
    def startChannel(self):

        self.fout.write('''nn RSS-''')

    def endChannel(self):
       self.fout.write('''
                   
                   
                   
                   
    function  GetTimeDiff(str)
    {
     if(str == '')
     {
      return '';
     }

     var pubDate = new Date(str);
     var nowDate = new Date();
     var diffMilSeconds = nowDate.valueOf()-pubDate.valueOf();
     var days = diffMilSeconds/86400000;
     days = parseInt(days);

     diffMilSeconds = diffMilSeconds-(days*86400000);
     var hours = diffMilSeconds/3600000;
     hours = parseInt(hours);

     diffMilSeconds = diffMilSeconds-(hours*3600000);
     var minutes = diffMilSeconds/60000;
     minutes = parseInt(minutes);

     diffMilSeconds = diffMilSeconds-(minutes*60000);
     var seconds = diffMilSeconds/1000;
     seconds = parseInt(seconds);

     var returnStr = "±±¾©·¢²¼Ê±¼ä£º" + pubDate.toLocaleString();

     if(days > 0)
     {
      returnStr = returnStr + " £¨¾àÀëÏÖÔÚ" + days + "Ìì" + hours + "Сʱ" + minutes + "·ÖÖÓ£©";
     }
     else if (hours > 0)
     {
      returnStr = returnStr + " £¨¾àÀëÏÖÔÚ" + hours + "Сʱ" + minutes + "·ÖÖÓ£©";
     }
     else if (minutes > 0)
     {
      returnStr = returnStr + " £¨¾àÀëÏÖÔÚ" + minutes + "·ÖÖÓ£©";
     }

     return returnStr;

    }

    function GetSpanText()
    {
     var pubDate;
     var pubDateArray;
     var spanArray = document.getElementsByTagName("span");

     for(var i = 0; i < spanArray.length; i++)
     {
      pubDate = spanArray[i].innerHTML;
      document.getElementsByTagName("span")[i].innerHTML = GetTimeDiff(pubDate);   
     }
    }

    GetSpanText();
   
               
               
                ''')
       self.fout.close()

    def characters(self, chars):
        if chars.strip():
            #chars = chars.strip()
            self.temp += chars
            #print self.temp

      
    def startTitle(self):

        if self.item:
            self.fout.write('''
                        nn
                    ''')

    def endTitle(self):

        if not self.imagein and not self.item:
            self.title = self.temp
            self.temp = ''
            self.fout.write(self.title.encode('gb2312'))

            #self.title = self.temp
            self.fout.write('''
                nnnn
                n

                        function copyLink()
                        {
                                clipboardData.setData("Text",window.location.href);
                                alert("RSSÁ´½ÓÒѾ­¸´ÖƵ½¼ôÌù°å");
                        }

                        function subscibeLink()
                        {
                                var str = window.location.pathname;
                                while(str.match(/^//))
                                {
                                        str = str.replace(/^//,"");
                                }
                                window.open("http://rss.sina.com.cn/my_sina_web_rss_news.html?url=" + str,"_self");

                        }
                        n
                n
                n
                n
            ''')

        if self.item:
            self.title = self.temp
            self.temp = ''
            self.fout.write(self.title.encode('gb2312'))
            self.fout.write('''
                       
                       
                       
                       
                       
                        ''')

    def startImage(self):
        self.imagein = True

    def endImage(self):
        self.imagein = False

    def startLink(self):
        if self.imagein:
            self.fout.write('''n ''')
        elif self.item:
            #self.link = self.temp
            pass
        else:
            self.fout.write(self.link)
            self.fout.write(''' " target="
      _blank
     "> ''')
            self.fout.write(self.title.encode('gb2312'))
            self.fout.write('''

                           
                           
                            ''')
            self.fout.write(self.description.encode('gb2312'))
            self.fout.write('''
                       
                        ¸´ÖÆ´ËÒ³Á´½Ó                ÎÒҪǶÈë¸ÃÐÂÎÅÁÐ±íµ½ÎÒµÄÒ³Ã棨¼òµ¥¡¢¿ìËÙ¡¢ÊµÊ±¡¢Ãâ·Ñ£©
                       
                       
                            ''')

    def startUrl(/tech-python/self/index.html):
        if self.imagein:
            self.fout.write('''n
                           
                           
                           


    
 
 

您可能感兴趣的文章:

  • Django项目使用示例步骤及代码
  • linux使用shell脚本,如何创建用户,并设置用户密码?能否给出示例?
  • 使用libpcap实现抓包程序的步骤及代码示例
  • curl不使用文件存取cookie php使用curl获取cookie示例
  • python使用循环实现批量创建文件夹示例
  • jQuery 回车事件enter使用示例
  • jquery中交替点击事件toggle方法的使用示例
  • php中的strpos使用示例
  • sql使用cast进行数据类型转换示例
  • mysql求和函数使用示例
  • c#闭包使用方法示例
  • java使用正则表达校验手机号码示例(手机号码正则)
  • 使用java执行定时任务示例
  • java的split方法使用示例
  • c++11可变参数使用示例
  • c#的params参数使用示例
  • android开发教程之switch控件使用示例
  • 使用python实现strcmp函数功能示例
  • c#使用资源文件的示例
  • 不使用php api函数实现数组的交换排序示例
  • java协变返回类型使用示例
  • 在linux下 和windows对应的dll 的技术是什么啊? 也就是说;在linux下进行函数和类的封装 使用什么技术啊?
  • 使用VMWare共享Win200中的文件夹,对应Linux中的哪个目录下面?
  • busybox中的gzip运行过程中出现page fault错误,并指出出错的指针,但是怎么使用gdb调试,找到指针对应的语句?
  • 使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
  • python使用在线API查询IP对应的地理位置信息实例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • 为什么我在使用nslookup命令的时候,正向解析(域名-》ip)没有问题,反向解析(ip-》域名)怎么查不到呢?
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • 做过中国农业银行项目的朋友请进,关于农行使用的解析XML消息的库如何使用!
  • 大家好,我想问下有人用过"linux进程的内存使用解析"中推荐使用的"Ben Maurer写的perl脚本"查看内存么
  • jquery代码-如何使用jQuery来解析xml
  • 使用标准SAX解析XML文档如何获取文档编码信息及约束它的dtd文件路径.
  • 请教 使用 vim 解析 log文件
  • linux下使用libxml库C编写的解析XML的程序
  • 急问java中有关HTML解析器的使用
  • 解析如何使用Zend Framework 连接数据库
  • 解析在WTL下使用双缓冲的实现方法
  • java的json解析类库使用示例
  • 解析使用C++编写无错代码的方法技巧
  • c#使用htmlagilitypack解析html格式字符串
  • crawler4j抓取页面使用jsoup解析html时的解决方法
  • 一个删选数据的例子,使用GROUP、DISTINCT实例解析
  • 求助:使用jaxp中的dom接口解析xml文件时出现错误(不会迟于5月23日结账)
  • 解析Android中string-array数据源的简单使用
  • 使用JDOM解析XML的中文问题?
  • c#使用nsoup解析html乱码解决方法分享 nsoup教程
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • c#中SAPI使用总结——SpVoice的使用方法




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3