博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中lxml的应用
阅读量:4970 次
发布时间: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

你可能感兴趣的文章
POJ-3211 Washing Clothes[01背包问题]
查看>>
[BZOJ4832][Lydsy1704月赛]抵制克苏恩
查看>>
数据库三范式
查看>>
看完漫画秒懂区块链
查看>>
开发工具,做一个有效率的开发者
查看>>
对Haskell这门语言的基本认识
查看>>
mysql 安装补充
查看>>
大学里如何学习 ?
查看>>
Oracle命令类别
查看>>
js面试题:关于数组去重的四种方法总结
查看>>
Linux内核分析(三)----初识linux内存管理子系统
查看>>
stc12c5a60s2驱动TEA5767收音机模块硬件调试总结
查看>>
vue中提示$index is not defined
查看>>
Java中对List集合内的元素进行顺序、倒序、随机排序的示例代码
查看>>
css选择器
查看>>
看懂下面C++代码才说你理解了C++多态虚函数!
查看>>
ASP.NET上传下载文件
查看>>
Galaxy Nexus 全屏显示-隐藏Navigation Bar
查看>>
Mob-第三方分享 /手机验证码
查看>>
Spring中使用Velocity模板
查看>>