zoukankan      html  css  js  c++  java
  • python xml文件处理

    xml 文件:

    <Maple>
      <Job Name="Job.xml">
        <Parameters>
          <Parameter Type="Single" Visible="True" ReadOnly="True" Name="Type" Value="Execution" />
          <Parameter Type="Single" Visible="True" ReadOnly="True" Name="Version" Value="1.1.2" />
        </Parameters>
        <Images>
          <Image Name="" Location="">
            <Workloads Version="">
              <Workload Name="streamServer" Location="C:SVSHAREMapleBinWorkloadsstreamServer">
                <Parameters>
                  <Parameter Type="Single" Visible="True" ReadOnly="False" Name="threads" Value="56" />
                  <Parameter Type="Single" Visible="True" ReadOnly="False" Name="RetriesOnError" Value="1" />
                  <Parameters Type="Multiple" Visible="True" ReadOnly="False" Name="OS" Value="posix" />
                  <Values>
                     <Value>win</Value>
                     <Value>posix</Value>
                  </Values>
                </Parameters>
              </Workload>
            </Workloads>
          </Image>
        </Images>
      </Job>
    </Maple>
    View Code

    获取root节点的三种方式
    import xml.etree.ElementTree as xmlDoc
    root=xmlDoc.parse('test.xml')._root #_root同getroot()
    root=xmlDoc.ElementTree(file='test.xml').getroot()
    root=xmlDoc.fromstring(open('test.xml').read())

    遍历查找
    for child in root:
      print child.tag
        for children in child:
          print children.tag

    直接索引访问
    root[0][1][0][0][0][0][3][0].text
    root[0][0][0].get('Type')

    find 查找,只匹配第一个
    root.find('Job').attrib #在直接子节点中查找Job直接子节点
    root.find("Job/Parameters/Parameter").attrib['Value'] #查找Job/Parameters/Parameter下的所有直接子节点,并返回第一个直接子节点
    root.find("Job/Parameters/Parameter[@Name='Maple Version' and Type='Single']").attrib['Value'] #查找Job/Parameters/Parameter下的所有直接子节点,并返回Name="Maple Versino"这个直接子节点

    #findall 查找,匹配所有的,返回数组
    root.findall('Job')[0].tag #在直接子节点中查找Job直接子节点,返回数组
    root.findall('Job/Parameters/Parameter')[1].attrib['Name'] #返回Job/Parameters/Parameter下的所有直接子节点的数组
    root.findall("Job/Parameters/Parameter[@Name='Type']") #返回Job/Parameters/Parameter下 Name='Type'的直接子节点的数组

    #iter 查找
    for i in root.iter('Value'): #在文件中查找Value的节点,生成器
      print i.text

    ##修改Text
    import xml.etree.ElementTree as xmlDoc
    tree=xmlDoc.parse('test.xml')
    root=tree.getroot()
    for i in root.iter('Value'):
      if i.text == 'win':
      i.text = 'Linux'
    print xmlDoc.dump(root) #预览
    tree.write('a.xml',encoding='utf-8') #保存


    #修改属性
    root[0].get('Name') 获取属性
    root[0].set('Name','aaa') 更新,添加属性
    del root.attrib['Type'] 删除属性

    #删除节点
    root.remove(root[0])
    tree.write('a.xml',encoding='utf-8')

    #添加节点
    import xml.etree.ElementTree as xmlDoc

    tree=xmlDoc.parse('a.xml')
    root=tree.getroot()

    node_1=xmlDoc.Element('Maple',{'Value':'Node1'}) #新建一个节点
    node_1.tail=' ' #缩进

    node_2=xmlDoc.SubElement(node_1,'Job') #新建一个子节点
    node_2.set('Value','100')
    node_2.text='10'

    root.insert(1,node_1) #append
    root.append(node_1) #insert

    node_3=xmlDoc.Element('Task1')
    node_4=xmlDoc.Element('Task2')
    root.extend([node_3,node_4]) #extend

    xmlDoc.dump(root) #预览
    tree.write('b.text',encoding='utf-8') #保存,可以保存到b.text 或者b.html或者b.xml

    **使用xml.etree.ElementTree 创建节点保存时,没有缩进,不太美观,所以采用xml.dom来创建节点并保存

    from xml.dom import minidom
    file=minidom.Document() #创建xml文件对象
    node_1=file.createElement('root') #创建节点
    file.appendChild(node_1) #使其成为根节点

    node_2=file.createElement('Maple') #创建第二个节点
    node_2.setAttribute('TestName','aaa') #设置attrib

    node_3=file.createElement('Job') #创建第三个节点
    node_3.setAttribute('Jobname','job') #设置attrib
    node_3.appendChild(file.createTextNode('100')) #设置Text

    node_2.appendChild(node_3)
    node_1.appendChild(node_2)

    with open('b.xml','w') as f:
    file.writexml(f,indent='',addindent=' ',newl=' ',encoding='UTF-8')

    indent:每个tag前填充字符
    newl:每个tag后的填充字符
    addindent:每个节点的缩进字符

  • 相关阅读:
    Jackson 框架,轻易转换JSON
    Java Thread 多线程 操作线程
    Oracle笔记 四、增删改、事务
    Oracle笔记 六、PL/SQL简单语句块、变量定义
    Java 的JSON、XML转换方法——目录索引
    SpringMVC 中整合JSON、XML视图一
    FreeMarker整合Spring 3
    Java Thread 多线程 介绍
    Jaxb2 转换XML文档
    Java Thread 多线程同步、锁、通信
  • 原文地址:https://www.cnblogs.com/xia-dong/p/11736713.html
Copyright © 2011-2022 走看看