博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中lxml的应用
阅读量:4971 次
发布时间:2019-06-12

本文共 2093 字,大约阅读时间需要 6 分钟。

<?xml version="1.0" encoding="UTF-8"?>
首先下载lxml,  ,
然后添加引用
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()

转载于:https://www.cnblogs.com/muzizongheng/p/3758369.html

你可能感兴趣的文章
Maven修改全局和局部JDK版本
查看>>
设计模式——组合模式(Composite Pattern)
查看>>
java设计模式之——代理模式
查看>>
php页面防止重复提交
查看>>
Perl DBI模块的例子
查看>>
python中str和repr区别
查看>>
升级win10后无法使用桥接网络解决方法
查看>>
如何进行跨网段的远程唤醒
查看>>
数据挖掘-同比与环比
查看>>
nginx+php详解
查看>>
怎样取php一个字符串中的某个字符
查看>>
我的友情链接
查看>>
RedHat6 管理应用服务【11】
查看>>
stm32F10x复习-1
查看>>
redis的学习使用(ubuntu系统下)
查看>>
20135226黄坤信息安全系统设计基础期末总结
查看>>
轻松快捷创建VSFTP虚拟用户
查看>>
[转]Javascript原型继承
查看>>
[转] vue异步处理错误
查看>>
CSS 3D动画概述菜鸟级解读之一
查看>>