首先下载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. Android---- 获取当前应用的版本号和当前android系统的版本号

    Android 应用程序获得版本号 我们可以在AndroidManifest.xml中设置程序的版本号等,如android:versionName="1.0",那如果想在代码中获取 ...

  2. numpy,scipy,pandas 和 matplotlib

    numpy,scipy,pandas 和 matplotlib 本文会介绍numpy,scipy,pandas 和 matplotlib 的安装,环境为Windows10. 一般情况下,如果安装了Py ...

  3. J实现时间格式的转换(附加对象的转换)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. amazeui页面分析4

    amazeui页面分析4 一.总结 1.直接照着作者的设计思路用:例如 pet_hd_con_time pet_hd_con_map ,这是time 和 map,那我别的说不定也可以直接用,比如aut ...

  5. Hadoop笔记(一)

    1.大数据的概述 大数据:巨量数据.海量数据,首先在数据的量上达到一定的规模,首先是人或者计算机在不合理时间内是不能够实现的数据量. 2.特点:数据量比较大,数据类型多样化.处理速度问题 3.大数据平 ...

  6. (嵌入式开发)自己写bootloader之编写第二阶段

    内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M.     ...

  7. php 获取数组第一个key 第一个键值对 等等

    PHP 获取数组中的第一个元素或最后一个元素的值或者键值可以使用 PHP 自带的数组函数. PHP 获取数组中的第一个元素的值或者键值所使用的函数: current() - 返回数组中当前元素值(即: ...

  8. ivotal-tc-Server与Tomcat区别

    Pivotal-tc-Server之前叫做SpringSource tc Server,包含三个版本分别是:Spring版.标准版和开发版,但其中只有开发版是免费的.比如在STS中包含的版本就是开发板 ...

  9. testng并发测试与测试并发

    一.testng并发测试 通过xml文件中suit结点的parallel属性指定,如 <suite name="bundle-module-testabc" parallel ...

  10. js课程 1-5 js如何测试变量的数据类型

    js课程 1-5 js如何测试变量的数据类型 一.总结 一句话总结:用typeof()方法. 1.js如何判断变量的数据类型? 用typeof()方法. 13 v=10; 14 15 if(typeo ...