Python解析XML整理一

来源:互联网 发布:java开发职位描述 编辑:程序博客网 时间:2024/06/08 04:54

    1.简单的XML文件内容如下:
<catalog>
  <bookisbn="1-56592-724-9">
   <title>The Cathedral&amp; theBazaar</title>
   <author>Eric S.Raymond</author>
  </book>
  <bookisbn="1-56592-051-1">
   <title>Making TeXWork</title>
   <author>NormanWalsh</author>
  </book>
  <!-- imagine more entries here...-->
</catalog>
2.代码
#! /usr/bin/python

import xml.dom.minidom
from xml.dom.minidom import Node

doc = xml.dom.minidom.parse("books.xml")

mapping = {}
for node in doc.getElementsByTagName_r("book"):
    isbn =node.getAttribute("isbn")
    L =node.getElementsByTagName_r("title")
    for node2 in L:
       title = ""
       for node3 in node2.childNodes:
           ifnode3.nodeType == Node.TEXT_NODE:
              title += node3.data
              mapping[isbn] = title
              # mapping now has the samevalue as in the SAX example:
              print(mapping)
不过这样写我感觉有问题!

以下是我整理的代码处理XML的常用操作:
1.如果配置信息如下:
<?xml version="1.0"encoding="UTF-8"?>
<config>
   <routelist>routelist</routelist>
   <route>route</route>
   <ip>ip</ip>
   <port>port</port>
   <delay>delay</delay>
</config>                         比如说:可以存储些连接配置DB的相关信息进来!
2.对应的解析XML的PY代码如下:
#=============================================
#作用:解析XML读取配置信息。整理归档,以后如果有
#DB信息要读取的话直接使用
#=============================================
from xml.dom.minidom import parse, parseString
def getText(nodelist):
    rc =""
    for node innodelist:
       if node.nodeType == node.TEXT_NODE:
           rc = rc + node.data
    returnrc
if __name__=="__main__":
    dom1 =parse('b.xml') # parse an XML file by name
   config_element = dom1.getElementsByTagName_r("config")[0]
    routelist =config_element.getElementsByTagName_r("routelist")[0]
    route =config_element.getElementsByTagName_r("route")[0]
    ip =config_element.getElementsByTagName_r("ip")[0]
    port =config_element.getElementsByTagName_r("port")[0]
    delay =config_element.getElementsByTagName_r("delay")[0]
    printgetText(routelist.childNodes)
便可以将配置信息的内容全部遍历一遍的呀!

上面这种是XML中只有两级标签结构,如果有三层的话
<webapp>
  <db>
     <dbhost></dbhost>
  </db>
  <db>
     <dbhost></dbhost>
  </db>
</webapp>
案例二:
XML格式如下:
<webapp>
   <db>
      <dbhost>192.168.100.40</dbhost>
      <dbusr>root</dbusr>
      <dbpw>321</dbpw>
      <dbname>mydb</dbname>
      <dbtable>error</dbtable>
      <dbtype>mysql</dbtype>
   </db>
   <db>
      <dbhost>192.168.100.40</dbhost>
      <dbusr>root</dbusr>
      <dbpw>321</dbpw>
      <dbname>muil</dbname>
      <dbtable>users</dbtable>
      <dbtype>mysql</dbtype>
   </db>
   <webserver>
      <method>GET</method>     <!--?????-->
      <ip>www.google.cn</ip>  
      <uri>search.asp</uri>
      <header>{'Accept': 'text/html','User-Agent':'Mozilla'}</header>                
      <body>5</body>                    
      <return>????????1</return>        
   </webserver>
</webapp>
对应解析的PY代码如下:
def getText(self,nodelist):
    rc =""
    for node innodelist:
       if node.nodeType == node.TEXT_NODE:
           rc = node.data
    returnrc
 #=============================================
  #作用:解析XML中的DB相关信息
  #区别于xmlUtil.py其中的XML格式修改过来
 #=============================================
  def ConfigXMLFile(self):
   self.__server    = ""
   self.__database   = ""
   self.__user      = ""
   self.__password   = ""
   self.__dbtable   = ""
   self.__dbtype    = ""

   self.__connect_elements self.__dom.getElementsByTagName_r("webapp")[0]#找到DB连接开始的XML标签
   self.__connect_db       self.__connect_elements.getElementsByTagName_r("db")#返回多个DB标签数据
   
    for db inself.__connect_db:
       mydate             = []
       myTupleDate        = []
       dbhost             =db.getElementsByTagName_r("dbhost")                          #在每一个序列中寻找到对应的标签
       for i indbhost:                                                  #遍历此标签对应的信息 
           self.__server   =self.getText(i.childNodes)
       dbusr              = db.getElementsByTagName_r("dbusr")
       for i in dbusr:
           self.__user    = self.getText(i.childNodes)
       dbpw               = db.getElementsByTagName_r("dbpw")
       for i in dbpw:
           self.__password = self.getText(i.childNodes)
       dbname             = db.getElementsByTagName_r("dbname")
       for i in dbname:
           self.__database = self.getText(i.childNodes)
       dbtable            = db.getElementsByTagName_r("dbtable")
       for i in dbtable:
           self.__dbtable  = self.getText(i.childNodes)
       dbtype             = db.getElementsByTagName_r("dbtype")
       for i in dbtype:
           self.__dbtype   =self.getText(i.childNodes)
       mydate.append(self.__server)
       mydate.append(self.__database)
       mydate.append(self.__user)
       mydate.append(self.__password)
       mydate.append(self.__dbtable)
       mydate.append(self.__dbtype)
       myTupleDate.append(mydate)
       self.AddConnect(myTupleDate)
可以将XML正常解析过来!

体验新版博客
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 ipad永久停用了怎么办 ipad停用1小时怎么办 ipad停用无法关机怎么办 citizen手表坏了怎么办 服务器磁盘满了怎么办 百度地图定位不准怎么办 宝宝准生证丢了怎么办 fgo刷不到材料怎么办 行者轨迹未上传怎么办? 房贷少了几块钱怎么办 房贷少了2块怎么办 天天在我们家蹭饭怎么办? 亲戚天天来吃饭怎么办 cad找不到图了怎么办 新建没有工作表怎么办 Html打开是乱码怎么办 xp只读取消不了怎么办 手机地图信号弱怎么办 苹果定位不准确怎么办 苹果导航卡死怎么办 没有上传的发票怎么办 发票显示未上传怎么办 发票未上传怎么办 影响 公务员国考补录不合格的怎么办 车辆转入退档怎么办 校园网总是断网怎么办 校园网经常断网怎么办 身份证号姓名电话号码泄露怎么办 中国邮政银行短信通知怎么办 中通递送不到怎么办 智齿碎了一半怎么办 驾照扣50分怎么办 办不了租赁合同怎么办 收到佰仟律师函怎么办 佰仟律师打电话怎么办 右转车道右方路禁行怎么办 收费站没带现金怎么办 过收费站没有现金怎么办 高速收费站没有现金怎么办 过收费站没现金怎么办 查社保忘记密码怎么办