首先下载lxml, http://www.lfd.uci.edu/~gohlke/pythonlibs/ ,然后添加引用
from lxml import _elementpath as DONTUSE
from lxml import etree
具体示例:
1.添加命名空间
#set namespace
nsmap = {"xsi": "http://www.w3.org/2001/XMLSchema-instance" }
g_statisticsRoot = etree.Element("DcmStatistics", nsmap = nsmap)
2.添加xml schema引用
#add xsd reference
g_statisticsRoot.set("{http://www.w3.org/2001/XMLSchema-instance}noNamespaceSchemaLocation", "DcmStatistics.xsd" )
3.添加注释
#add comment, 利用addprevious添加到根节点的前面
comment = etree.Comment("create by jiangong.li")
g_statisticsRoot.addprevious(comment)
4.尝试多种编码来解析xml
def decodingXml(xmlFile):
    tree = None
    encoding = "utf-8"
    while(True):
        try:
            parser = etree.XMLParser(remove_blank_text= True, encoding=encoding, remove_comments = False)
            tree = etree.parse(xmlFile, parser)
        except Exception as e:
            if (encoding != "gb18030"):
                encoding = "gb18030"
                continue
            else:
                print( "\nPAR XML ERROR, decoding error." )
                break
        break
    return tree
5.遍历xml下的所有子节点,不止直属第一级子节点. iter()
     for element in root.iter():
          element.tail = None
6.遍历xml下的第一级子节点. iterchildren()
    for e in srcParentNode.iterchildren():
        if e is srcParentNode:
            continue
        name = ""
        #statistics node
        if  e.tag == "element":
            name = "Element"
        elif e.tag == "sequence":
            name = "Sequence"
        elif e.tag == "item":
            name = "Item"
        else:
            print( "\nUnsupported element type: %s\n" %(e.tag))
            name = e.tag
            # Only parse element/sequence/item
             continue     
7.添加子节点到尾部. append()
def getXmlElement(nodeName, parentNode):
    if parentNode  == None:
        raise Exception( "parent node is None")
    nodes = parentNode.xpath( './'+nodeName)
    if len(nodes) == 0:
        node = etree.Element(nodeName)
        parentNode.append(node)
        return node
    else:
        return nodes[0]
8.格式化成str输出
etree.tostring(g_statisticsRoot, encoding= "UTF-8", xml_declaration=True , pretty_print=True, with_comments=True )
9.保存成xml文件
        statisticsResult =  open(g_xmlName, "bw+")
        statisticsResult.write(etree.tostring(g_statisticsRoot, encoding= "UTF-8", xml_declaration=True, pretty_print=True , with_comments=True))
        statisticsResult.flush()
        statisticsResult.close()

python中lxml的应用的更多相关文章

  1. python中的lxml模块

    Python中自带了XML的模块,但是性能不太好,相比之下,LXML增加了很多实用的功能. lxml中主要有两部分, 1) etree,主要可以用来解析XML字符串, 内部有两个对象,etree._E ...

  2. 【python】lxml

    来源:http://lxml.de/tutorial.html lxml是python中处理xml的一个非常强大的库,可以非常方便的解析和生成xml文件.下面的内容翻译了链接中的一部分 1.生成空xm ...

  3. 如何导入python中的模块

    作为一名新手Python程序员,你首先需要学习的内容之一就是如何导入模块或包.但是我注意到,那些许多年来不时使用Python的人并不是都知道Python的导入机制其实非常灵活.在本文中,我们将探讨以下 ...

  4. Python 中常见错误总结

    IndentationError: unexpected indent Python 中强制缩进,, IndentationError: unexpected indent 缩进错误 这类错误非常常见 ...

  5. Python中的编码问题(encoding与decode、str与bytes)

    1 引言 在文件读写及字符操作时,我们经常会出现下面这几种错误: TypeError: write() argument must be str, not bytes AttributeError: ...

  6. Windows下Python安装lxml

    1.下载easy_install的安装包,下载地址:https://pypi.Python.org/pypi/setuptools 我是Windows7,所以直接下载Windows(Simplify) ...

  7. Python中xPath技术和BeautifulSoup的使用

    xpath基本知识 XPath语法:使用路径表达式来选取XML或HTML文档中的节点或节点集 路径表达式 nodename:表示选取此节点的所有子节点 /    : 表示从根节点选取 //   :选择 ...

  8. Python中的网络爬虫怎么用?

    爬虫概述 (约2016年)网络爬虫个人使用和科研范畴基本不存在问题,但商业盈利范畴就要看对方了. 通过网站的Robots协议(爬虫协议)可以知道可以和不可以抓取的内容,其中User-Agent: 为允 ...

  9. python中的线程锁

    锁对象 原始锁是一个在锁定时不属于特定线程的同步基元组件.在Python中,它是能用的最低级的同步基元组件,由 _thread 扩展模块直接实现. 原始锁处于 "锁定" 或者 &q ...

随机推荐

  1. Android 电容屏驱动

    Android 电容屏(一):电容屏基本原理篇 Android 电容屏(二):驱动调试之基本概念篇 Android 电容屏(三):驱动调试之驱动程序分析篇

  2. Linux网络检测手段汇总

    1.iftop iftop可测量通过每一个套接字连接传输的数据:它采用的工作方式有别于nload.iftop使用pcap库来捕获进出网络适配器的数据包,然后汇总数据包大小和数量,搞清楚总的带宽使用情况 ...

  3. node拦截器设置

    node的拦截器主要目的是用户登录的时候为用户存了一个session,用户登录后的其他操作都要经过拦截器,对比session的值,并把session的过期时间延长. 拦截器主要是在路由文件routes ...

  4. nodejs实现静态托管

    const express = require("express"); const app = express(); /* 语法1: app.use(express.static( ...

  5. JMeter学习(十一)属性和变量

    一.Jmeter中的属性: 1.JMeter属性统一定义在jmeter.properties文件中,我们可以在该文件中添加自定义的属性 2.JMeter属性在测试脚本的任何地方都是可见的(全局),通常 ...

  6. python脚本发送电子邮件

    #!/usr/bin/pythonimport smtplibimport stringHOST='smtp.qq.com'#HOST='mail.qq.com'SUBJECT='Test email ...

  7. java基础9(IO流)-File类

    File类 File:文件和目录路径名的抽象表示形式.即java中把文件或者目录都封装成File对象 代码练习1 import java.io.File; public class FileDemo1 ...

  8. 用intellij idea 写第一个Java程序

    Java小白,还不怎么会eclipse,只会在命令行用javac编译并java运行编译后的类. 英文还不好orz 发现创建项目后,能build但就是不能run... 找了半天教程没找着,去官网溜了一下 ...

  9. 安全的 ActiveMQ

    本章知识点 ActiveMQ 鉴权 ActiveMQ 授权 怎么创建一个自定义安全插件 使用基于证书的安全保证 简介 安全地访问消息代理以及它的 destinations 是公众关注的焦点.因此,Ac ...

  10. spring boot: 线程池ThreadPoolTaskExecutor, 多线程

    由于项目里需要用到线程池来提高处理速度,记录一下spring的taskExecutor执行器来实现线程池. ThreadPoolTaskExecutor的配置在网上找了很多解释没找到,看了下Threa ...