热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用Python去解析XML报文V1.1

演示如何用Python解析XML。如下分别是待解析的XML报文,尾部是Python源码。<?xml
演示如何用Python解析XML。
如下分别是待解析的XML报文,尾部是Python 源码。
    1. xml version="1.0" encoding="iso8859-1"?>
    2. <view id="CCBSA_v" msgType="1">
    3. <viewElem id="jrcfwq"  dispName="集群">
    4. <viewElem id="fwqsl" dispName="服务器数量" value="1"/>
    5. <viewElem id="Master" dispName="主控节点" value="STAR"/>
    6. <viewElem id="Server" >
    7. <viewElem id="SrvName" value="01" dispName="STAR">
    8. <viewElem id="Plat" dispName="平台信息">
    9. <viewElem id="PlatStat" dispName="平台状态">
    10. <viewElem id="MchPort" dispName="机器端口" value="12000"/>
    11. <viewElem id="MchState" dispName="机器状态" value="在线"/>
    12. <viewElem id="AllProc" dispName="总进程数" value="0"/>
    13. <viewElem id="EslProc" dispName="平台进程数" value="29"/>
    14. <viewElem id="SemNum" dispName="信号灯数" value="104"/>
    15. <viewElem id="DrqSem" dispName="DRQ使用信号灯" value="53"/>
    16. viewElem>
    17. <viewElem id="CpuStat" dispName="CPU状态">
    18. <viewElem id="CpuIdle" dispName="idle" value="0"/>
    19. <viewElem id="CpuUser" dispName="user" value="0"/>
    20. <viewElem id="CpuNice" dispName="nice" value="0"/>
    21. <viewElem id="CpuSys" dispName="sys" value="0"/>
    22. <viewElem id="CpuWio" dispName="wio" value="0"/>
    23. viewElem>
    24. <viewElem id="SysInfo" dispName="操作系统信息">
    25. <viewElem id="CpuNum" dispName="CPU颗数" value="0"/>
    26. <viewElem id="PhyMem" dispName="物理内存(K)" value="0"/>
    27. <viewElem id="VirtMem" dispName="虚拟内存(K)" value="0"/>
    28. <viewElem id="UsedMem" dispName="已用内存(K)" value="0"/>
    29. <viewElem id="exit_freeMem" dispName="可用内存(K)" value="0"/>
    30. <viewElem id="IFaceNum" dispName="网络接口数" value="0"/>
    31. viewElem>
    32. <viewElem id="ProjInfo" dispName="项目信息">
    33. <viewElem id="ShmSize" dispName="部署共享内存大小(k)" value="15251168"/>
    34. <viewElem id="ShmKeep" dispName="部署共享内存剩余(k)" value="16769072"/>
    35. <viewElem id="BcbSize" dispName="交换共享内存大小(k)" value="6304"/>
    36. <viewElem id="BcbUsed" dispName="已用交换共享内存(k)" value="2208"/>
    37. <viewElem id="BcbMax" dispName="最大交换共享内存(k)" value="70816"/>
    38. <viewElem id="ChkNum" dispName="当前已用缓冲区段数" value="1"/>
    39. <viewElem id="DrqMsg" dispName="缓存消息数" value="0"/>
    40. <viewElem id="MsqNum" dispName="队列中的消息数" value="0"/>
    41. <viewElem id="TranNum" dispName="本机交易统计" value="322047"/>
    42. <viewElem id="DTAMPID" dispName="DTA管理服务进程号" value="3727372"/>
    43. <viewElem id="RCYCLPID" dispName="垃圾回收服务进程号" value="3739830"/>
    44. <viewElem id="SYNCPID" dispName="多机同步服务进程号" value="3670122"/>
    45. <viewElem id="ISSUEPID" dispName="多机发布服务进程号" value="2871348"/>
    46. <viewElem id="MACHSVRPID" dispName="多机交换服务进程号" value="0"/>
    47. <viewElem id="MONCPID" dispName="多机监控同步服务进程号" value="0"/>
    48. <viewElem id="MONSPID" dispName="多机监控发布服务进程号" value="0"/>
    49. <viewElem id="DTANUM" dispName="适配器个数" value="12"/>
    50. ....
    51. ....
    52. ......

 

 

 

  1. from xml.dom import minidom
  2. from sys import stderr
  3. from os.path import join
  4. __version__ = "V1.1"
  5. """
  6.   Definition for types and maps
  7. """
  8. dataTypMap = {"integer"0"foat"1"boolean"2,
  9.               "char"3"string"4"void"5"double"6,
  10.               "long"7"object"8"datetime"9}
  11. nodeTypMap = {"LEAF"0"NODE"2}
  12. nodeImgMap = {nodeTypMap["LEAF"]: "/images/leaf.gif",
  13.               nodeTypMap["NODE"]: "/images/node.gif"}
  14. whoMap = {"Views"0"Nodes"1,
  15.           "NodeViews"2"NodesRel"3}
  16. class TIndicatorData:  
  17.   def __init__ (self, XML, dest):
  18.     self.__xmldoc = minidom.parse (XML.strip (" "))
  19.     self.__root = self.__xmldoc.documentElement
  20.     self.__destPath = dest.strip (" ")
  21.     self.__gNodesList = []    # Storing unique nodes
  22.     self.__hViews = None      # File handle for isac_mnt_view
  23.     self.__hNodes = None      # File handle for isac_mnt_basenode
  24.     self.__hNodeViews = None  # File handle for isac_mnt_basenode_view
  25.     self.__hNodesRel = None   # File handle for isac_mnt_basenode_rel
  26.     self.__outputData = {"Views": "", "Nodes": "", "NodeViews": "", "NodesRel": ""}
  27.   # end def
  28.   def GenIndicators (self):
  29.     self.__hViews = open (join (self.__destPath, "isac_mnt_view.txt"), "w+")
  30.     self.__hNodes = open (join (self.__destPath, "isac_mnt_basenode.txt"), "w+")
  31.     self.__hNodeViews = open (join (self.__destPath, "isac_mnt_basenode_view.txt"), "w+")
  32.     self.__hNodesRel = open (join (self.__destPath, "isac_mnt_basenode_rel.txt"), "w+")
  33.     try:
  34.       self.__retrieveIndViewData ("Nodes")
  35.       self.__retrieveIndViewData ("Views")
  36.       self.__retrieveIndViewData ("NodeViews")
  37.       self.__retrieveIndViewData ("NodesRel")
  38.       self.__write (self.__hNodes, "Nodes")
  39.       self.__write (self.__hViews, "Views")
  40.       self.__write (self.__hNodeViews, "NodeViews")
  41.       self.__write (self.__hNodesRel, "NodesRel")
  42.     finally:
  43.       self.__hViews.close ()
  44.       self.__hNodes.close ()
  45.       self.__hNodeViews.close ()
  46.       self.__hNodesRel.close ()
  47.   # end def
  48.   def __write (self, fileHandle, outputDataName):
  49.     if not fileHandle:
  50.       stderr.write ("Invalid file handle corresponding to %s" % outputDataName)
  51.       return
  52.     fileHandle.write (self.__outputData[outputDataName.strip (" ")].encode ("GB2312"))
  53.     print fileHandle.name
  54.   def __retrieveIndViewData (self, whoMapKeyName):
  55.     self.__getNodes (self.__root, whoMap[whoMapKeyName])
  56.     self.__clearNodesList ()
  57.   def __clearNodesList (self):
  58.     self.__gNodesList = []
  59.   def __getNodePaths (self, ANode, isDynNode = True, initPath = ""):
  60.     """
  61.       retrieves the value of string of static nodes or dynamic nodes
  62.       exclueded leaf-nodes.
  63.     """
  64.     if (not ANode) or (not ANode.hasChildNodes ()):
  65.       return initPath
  66.     if initPath.strip (" ") == "":
  67.       initPath = "/%s" % ANode.attributes["id"].value.strip (" ")
  68.       
  69.     for elem in ANode.childNodes:
  70.       if (not elem.localName) or (not elem.hasChildNodes ()):
  71.         continue
  72.       
  73.       idPath = ""    
  74.       if isDynNode and elem.hasAttribute ("value"):
  75.         idPath = "%s/%s" % (initPath, elem.attributes["value"].value.strip (" "))
  76.       else:
  77.         idPath = "%s/%s" % (initPath, elem.attributes["id"].value.strip (" "))      
  78.       print idPath
  79.       self.__getNodePaths (elem, isDynNode, idPath)
  80.     # end for
  81.   # end def
  82.   def __getNodeType (self, ANode):
  83.     ret = nodeTypMap["LEAF"]
  84.     if ANode.hasChildNodes ():
  85.       ret = nodeTypMap["NODE"]
  86.     return ret
  87.   # end def
  88.   def __outputNodes (self, ANode):
  89.     """
  90.       generates the records of unique nodes in XML
  91.     """
  92.     if not ANode:
  93.       return
  94.     
  95.     nodeType = self.__getNodeType (ANode)
  96.     dataType = dataTypMap["void"]
  97.     if nodeType == nodeTypMap["LEAF"and ANode.hasAttribute ("value"):
  98.       dataValue = ANode.attributes["value"].value.strip (" ")
  99.       if dataValue.isdigit ():
  100.         dataType = dataTypMap["integer"]
  101.       else:
  102.         try:
  103.           float (dataValue)
  104.           dataType = dataTypMap["float"]
  105.         except:
  106.           dataType = dataTypMap["string"]
  107.     dispName = ANode.attributes["id"].value.strip (" ")
  108.     if ANode.hasAttribute ("dispName"):
  109.       dispName = ANode.attributes["dispName"].value.strip (" ") /
  110.                  .encode ("ISO8859").decode ("GB2312")                
  111.     ProcType = 0
  112.     PrstType = 1
  113.     UnitName = ' '
  114.     initValue = '0'
  115.     updateTime = ' '
  116.     self.__outputData["Nodes"] += "%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|/n" % /
  117.                                   (ANode.attributes["id"].value.strip (" "),
  118.                                    dispName, dispName, nodeImgMap[nodeType],
  119.                                    nodeType, dataType, ProcType, PrstType,
  120.                                    UnitName, initValue, updateTime)
  121.   # end def
  122.   def __outputViews (self, ANode):
  123.     """
  124.       generates the records of views.
  125.     """
  126.     if (not ANode) or (self.__getNodeType (ANode) != nodeTypMap["NODE"]):
  127.       return
  128.     nodeID = ANode.attributes["id"].value.strip (" ")
  129.     viewName = nodeID
  130.     if ANode.hasAttribute ("dispName"):
  131.       viewName = ANode.attributes["dispName"].value /
  132.                  .encode ("ISO8859").decode ("GB2312")
  133.     
  134.     self.__outputData["Views"] += "%s|%s|%s|/n" % (nodeID, viewName, nodeID)
  135.     
  136.   # end def
  137.   def __outputNodeViews (self, ANode):
  138.     if not ANode:
  139.       return
  140.     
  141.     if self.__getNodeType (ANode) == nodeTypMap["NODE"]:
  142.       self.__outputData["NodeViews"] += /
  143.                                      "%s|%s|/n" % /
  144.                                      (ANode.attributes["id"].value.strip (" "),
  145.                                       ANode.attributes["id"].value.strip (" "))
  146.     else:
  147.       self.__outputData["NodeViews"] += /
  148.                                      "%s|%s|/n" % /
  149.                                      (ANode.attributes["id"].value.strip (" "),
  150.                                       ANode.parentNode.attributes["id"].value.strip (" "))
  151.   # end def
  152.   def __outputNodesRel (self, ANode):
  153.     if (not ANode) or (ANode.parentNode.nodeType == ANode.DOCUMENT_NODE):
  154.       return
  155.     self.__outputData["NodesRel"] += "%s|%s|/n" % /
  156.                                      (ANode.parentNode.attributes["id"].value.strip (" "),
  157.                                       ANode.attributes["id"].value.strip (" "))
  158.   # end def
  159.   def __handleByType (self, ANode, Who):
  160.     """
  161.       Determine which kind of data should be output.
  162.     """
  163.     if not ANode:
  164.       return
  165.     
  166.     if Who == whoMap["Nodes"]:
  167.       self.__outputNodes (ANode)
  168.     elif Who == whoMap["Views"]:
  169.       self.__outputViews (ANode)
  170.     elif Who == whoMap["NodeViews"]:
  171.       self.__outputNodeViews (ANode)
  172.     elif Who == whoMap["NodesRel"]:
  173.       self.__outputNodesRel (ANode)
  174.   # end def
  175.   def __getNodes (self, ANode, Who):
  176.     """ retrieves all static nodes """
  177.     if not ANode:
  178.       return
  179.     
  180.     if ANode.parentNode.nodeType == ANode.DOCUMENT_NODE:
  181.       self.__handleByType (ANode, Who)
  182.     for elem in ANode.childNodes:
  183.       if not elem.localName:
  184.         continue
  185.       if not elem.hasAttribute ("id"):
  186.         stderr.write ("Invalid tag without an attribute named 'id' FOUND!")
  187.         continue
  188.       tagID = elem.attributes["id"].value.strip (" ")
  189.       try:      
  190.         self.__gNodesList.index (tagID)
  191.         continue    
  192.       except ValueError:
  193.         # NOT FOUND
  194.         self.__gNodesList.append (tagID)
  195.       self.__handleByType (elem, Who)
  196.       self.__getNodes (elem, Who)
  197.   # end def
  198. # end class
  199. if __name__ == "__main__":
  200.   """
  201.     CAUTION: Please set encoding by ISO8859 in XML head!
  202.   """
  203.   ind = TIndicatorData (
  204.     r"D:/Documents/Construction_Bank/SH/CCBSA/Design/ccbsa_ind21.xml",
  205.     r"D:/Temp")
  206.   ind.GenIndicators ()
  207.   print "/nMISSION COMPLETED."
  208. # END OF FILE.

推荐阅读
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
author-avatar
手机用户2602936275
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有