首先下载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. Windows下Python安装lxml

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

  2. 【python】lxml中多个xml采用相同节点时出现的问题

    今天突然发现了一个lxml的坑. 假设我们有一个节点 <id>123</id> 有两个父节点都要用上述节点,则必须把上面的节点写两遍!用同一个会出错! 出错例子: #!/usr ...

  3. 【python】lxml

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

  4. 【python】lxml查找属性为指定值的节点

    假设有如下xml在/home/abc.xml位置 <A> <B id=" name="apple"/> <B id=" name= ...

  5. Python之lxml

    作者:Shane 出处:http://bluescorpio.cnblogs.com lxml takes all the pain out of XML. Stephan Richter lxml是 ...

  6. 在MacOS下Python安装lxml报错xmlversion.h not found 报错的解决方案

    最近在看一个自动化测试框架的问题,需要用到Lxml库,下载lxml总是报错. 1,使用pip安装lxml pip install lxml 2,然后报错了,报错内容是: In file include ...

  7. Python使用lxml模块和Requests模块抓取HTML页面的教程

    Web抓取Web站点使用HTML描述,这意味着每个web页面是一个结构化的文档.有时从中 获取数据同时保持它的结构是有用的.web站点不总是以容易处理的格式, 如 csv 或者 json 提供它们的数 ...

  8. Python 安装 lxml 插件

    1.下载 lxml 地址:https://pypi.python.org/pypi/lxml/3.8.0#downloads 我用的是python 3.6,我下载了  lxml-3.8.0-cp36- ...

  9. windows下使用pip安装python模块lxml

    pip install lxml 1 1 会有如下问题:  结果一路解决下去,解决了一个坑还是有一个坑,遂放弃,查找有没有别的解决办法. 亲测使用wheel+pip可以成功安装lxml! wheel本 ...

  10. 【Python】Python加lxml实现图片解析下载功能

    1.下载网页:OpenHtml.py import urllib.request from urllib.parse import quote class HtmlLoader(object): de ...

随机推荐

  1. eclipse 使用jetty调试时,加依赖工程的源码调试方法

    [1] 添加source eclipse-->debug as-->debug configurations-->source [2]若source不起作用 重新编译一下,mvn c ...

  2. GO语言学习(三)GO语言学习API文档

    一:GoLang标准库API文档 https://studygolang.com/pkgdoc

  3. Java Timer TimerTask Example(java Timer的例子)

    Java java.util.Timer is a utility class that can be used to schedule a thread to be executed at cert ...

  4. linux目录架构及常用的基本命令

    linux目录架构 /   根目录 /bin    常用的命令 binary file 的目錄 /boot   存放系统启动时必须读取的档案,包括核心 (kernel) 在内      /boot/g ...

  5. 开发板 视频1 05_01 05_02 05_03 关于ubuntu的一些操作

    ctrl+alt+T 打开中端 ctrl+d  退出 ctrl+alt+f1 到f6 进入dos中端 ctrl+alt+f7 是退出 05_02 启动root用户   也就是进入 前面出现root了 ...

  6. 关于Altium Designer的BOM,元件清单

    在生成BOM列表的时候,要记得调整BOM的表格的宽度,以免显示不全, 还有就是BOM列表一共有 comment栏 ,description栏,designator栏,footprint栏,libref ...

  7. 算法 Tricks(五)—— 将一个序列量化为何值时平方误差最小

    设数列为 A[],区间在 [a, b],设使量化后误差平方最小的数值为 m,则误差平方关于 m 的函数可以写作如下形式: ∑i=ab(A[i]−m)2=(b−a+1)⋅m2−2m∑i=abA[i]+∑ ...

  8. PostgreSQL 序列

    PostgreSQL 中的序列是一个数据库对象,本质上是一个自增器.因此,序列在其他同类型数据库软件中以 autoincrment 值的形式存在.在一张表需要非随机,唯一标实符的场景下,Sequenc ...

  9. [CSS] Control Image Aspect Ratio Using CSS

    Resize images and videos to fill their parent and maintain their aspect ratio with pure CSS. The new ...

  10. JDK8 直接定义接口中静态方法

    JDK8前,接口只能是抽象方法. 但是在JDK8中,静态方法是可以直接定义方法体,可以直接用接口名调用.实现类和实现是不可以调用的 一.直接调用接口的静态方法 二.实现接口的子类来调用接口的静态方法 ...