xiaoxiao075
#解析一个database的xml文件

"""
<databaselist type="database config">
    <database>
        <host>localhost</host>
        <username>root</username>
        <password>11111</password>
        <datasename>wulaoshi</datasename>
    </database>
</databaselist>
"""

#解析xml文件
domtree=parse(\'d:\\pylianxi\\data.xml\')

#获取根节点
datalist=domtree.documentElement

d={}
#获取标签为database的子节点
database=datalist.getElementsByTagName(\'database\')

#database的子节点轮询,过滤掉textNode节点,取出文本值
for i in database[0].childNodes[1::2]:
    tag=i.tagName
    d[tag]=i.childNodes[0].data #childNodes 获取的是一个列表,通过childNodes[0]获取具体对象

print(\'database:\',d)

 2、手动写一个xml文件

#写xml

from xml.dom.minidom import *

#创建一个文档对象
doc=Document()

#创建一个根节点
root=doc.createElement(\'managers\')

#根节点添加属性
root.setAttribute(\'company\',\'中体彩\')
print(root.getAttribute(\'company\'))

#根节点加入到tree
doc.appendChild(root)


#创建二级节点
company=doc.createElement(\'gloryroad\')
name=doc.createElement(\'name\')
name.appendChild(doc.createTextNode(\'公司名称\')) #添加文本节点

#创建一个带着文本节点的子节点
ceo=doc.createElement(\'ceo\')
ceo.appendChild(doc.createTextNode(\'吴总\'))  #<ceo>吴总</ceo>

company.appendChild(name) #name加入到company
company.appendChild(ceo)
root.appendChild(company)#company加入到根节点

print(ceo.tagName)

print(doc.toxml())

#存成xml文件
fp=open(\'d:\\pylianxi\\test.xml\',\'w\',encoding=\'utf-8\')
doc.writexml(fp,indent=\'\',addindent=\'\t\',newl=\'\n\',encoding=\'utf-8\')
fp.close()

 3、通过字典数据 存成xml文件

from xml.dom.minidom import Document
#在内存中创建一个空的文档
doc = Document() 

#创建一个根节点Managers对象
root = doc.createElement(\'Managers\') 

#设置根节点的属性
root.setAttribute(\'company\', \'哈哈科技\') 
root.setAttribute(\'address\', \'科技软件园\') 

#将根节点添加到文档对象中
doc.appendChild(root)
 
managerList = [{\'name\' : \'joy\',  \'age\' : 27, \'sex\' : \'\'},
               {\'name\' : \'tom\', \'age\' : 30, \'sex\' : \'\'},
               {\'name\' : \'ruby\', \'age\' : 29, \'sex\' : \'\'}  ]

for i in managerList :
  nodeManager = doc.createElement(\'Manager\')
  for j in i:
    
    nodeName = doc.createElement(j)
    #给叶子节点name设置一个文本节点,用于显示文本内容
    nodeName.appendChild(doc.createTextNode(str(i[j])))
    
    #将各叶子节点添加到父节点Manager中,
    nodeManager.appendChild(nodeName)

  #最后将Manager添加到根节点Managers中
  root.appendChild(nodeManager)

#开始写xml文档
fp = open(\'d:\\pylianxi\\company11.xml\', \'w\',encoding=\'utf-8\')
doc.writexml(fp, indent=\'\', addindent=\'\t\', newl=\'\n\', encoding="utf-8")
fp.close()

 4、使用etree的方式解析xml文件

#etree xml

from xml.etree import ElementTree as ET

  \'\'\'
  直接解析XML文件并获得根节点

  tree = ET.parse(xmlFilePath)

  root = tree.getroot()
  解析字符串

  root = ET.fromstring(fp.read())
  \'\'\'

tree=ET.ElementTree(file=\'d:\\pylianxi\\movies.xml\')

root=tree.getroot()

#打印根节点的标签及属性字典
print(root.tag)
print(root.attrib)

#获取子节点movie的标签及属性字典
for i in root:
    print (i.tag)
    print ("********", i.attrib)

print ("*"*50)
print (root[0].tag)
print (root[0].text)  #“打印的内容为一个回车”
print (root[0][0].tag) #第一个movie节点的第一个子标签type
print (root[0][0].text)

print ("*"*50)
for i in tree.iter():  #递归遍历所有子元素
    print (i.tag, i.attrib,i.text)

print ("*"*50)
for elem in tree.iterfind(\'movie/type\'):#或者这种方式./movie/type查找movie下一级节点中的所有type标签,类似xpath查找
    print (elem.tag, elem.text)

print ("*"*50)
print(list(tree.iter(tag=\'stars\')))
for elem in tree.iter(tag=\'stars\'):#在整个树中查找标签为stars的元素
    print (elem.tag, elem.text)


print ("*"*50)
for elem in tree.iterfind(\'*[@title="Ishtar"]\'): #或者movie[@title="Ishtar"] 在下一级节点查找属性为title="Ishtar"的元素
    print (elem.tag, elem.attrib)

print ("-"*50)
root = tree.getroot()                #获取第一级movie元素
print ("root:",root[0].tag  )          #打印第一级movie元素的标签,为movie
print ("subnode:",root[0][0].tag)      #打印第一级movie元素下的第一个子元素标签type
print ("subnode:",root[0][1].tag )     #打印第一级movie元素下的第二个子元素标签format
print ("subnode:",root[0][2].tag )     #打印第一级movie元素下的第三个子元素标签year
print ("subnode:",root[0][3].tag )     #打印第一级movie元素下的第四个子元素标签rating
print ("subnode:",root[0][4].tag ) 

del root[0][4] #删除第一级movie元素下的第五个子元素
del root[0][3] #删除第一级movie元素下的第四个子元素
del root[0][2] #删除第一级movie元素下的第三个子元素
del root[0][1] #删除第一级movie元素下的第二个子元素

del root[3] #删除第四个movie元素
del root[2] #删除第三个movie元素

for i in root:
    print(i.tag,i.attrib)
    for j in i:
        print(\'******\',j.tag,j.text)
#tree.write("d:\\movies.xml")  #将变更的xml文件写入到文件中

5、etree的方式生成xml

 

#etree 生成一个xml

a = ET.Element(\'elem\')            #生成一个节点elem,没有文本节点
aa = ET.SubElement(a, \'type\')    #生成一个字节点下的子节点child1
aa.text = "a的type子节点"              #在子节点上添加文本节点
aa2 = ET.SubElement(a, \'name\')    #生成一个字节点下的子节点child2
aa2.text=\'a的name子节点\'

b = ET.Element(\'elem_b\')          #生成一个节点elem_b,没有文本节点
b.set(\'company\',\'科技公司\')
bb=ET.SubElement(b,\'type\')
bb.text=\'bb的type子节点\'
bb2=ET.SubElement(b,\'name\')
bb2.text=\'bb的name子节点\'

root = ET.Element(\'root\')         #生成一个节点root
root.extend((a, b))               #将a、b两个变量存储的节点elem和elem1添加到root节点下
tree = ET.ElementTree(root)       #生成节点树
root[0].set(\'foo\', \'bar\')         #设定第一个子元素的属性foo,值为bar


tree.write("d:\\pylianxi\\test.xml",encoding=\'utf-8\')        #将xml文件内容写入到文本文件中,文件格式并不是很漂亮

 

分类:

技术点:

相关文章: