zoukankan      html  css  js  c++  java
  • python操作xml

    xpath_test.html

    <html>
    <body>
    <head>xml Test</head>
    <div id="content">
        <ul id="ul">
            <li>NO.1</li>
            <li>NO.2</li>
            <li>NO.3</li>
        </ul>
    	<ul id="ul2">
            <li>one</li>
            <li>two</li>
        </ul>
        <div>
            <p>第二个标签</p>
        </div>
    </div>
    <div id="url">
        <a href="http:www.58.com" title="58">58</a>
        <a href="http:www.csdn.net" title="CSDN">CSDN</a>
        <a href="http:www.csdn.net222" title="CSDN">sssss</a>
    </div>
    </body>
    </html>
    

    代码:

    import xml.etree.ElementTree as ET
    from xml.etree.ElementTree import Element
    
    
    # ----------ElementTree---------
    # 从文件解析,返回elementTree类型
    tree = ET.parse('xpath_test.html')
    
    # 获取根结点 element
    root = tree.getroot()
    for x in root: # 遍历根节点的子节点
        print(x,x.tag,x.text)
    
    # find只查找一个;获取第一个ul标签。.//ul是xpath写法
    ele = tree.find('.//ul')
    e = ele.find('.//li') # 获取ul的第一个li标签
    
    # 从ele中删掉e这个子结点
    ele.remove(e)
    # for e in ele:
    #     if e.text == "NO.1":
    #         ele.remove(e)
    
    # 查找所有的div标签,返回值:list类型
    tree.findall('.//div')
    
    # 迭代,获取tree所有结点(无视层级)
    it = tree.iter()
    for i in it:  # 迭代所有结点
        print(i)
    
    divs = tree.iterfind('.//div') # 迭代查找所有div标签,返回值是迭代类型,需要遍历
    for div in divs:
        print(div,div.text,div.tag)
    
    # ------------------Element-----------------
    
    # xml = ET.XML(string) # 解析字符串 -> element
    d = tree.find('.//div')
    
    # 创建element. 用法:Element(标签名,属性键值对)
    new_ele = Element('fff',{'id':'123'})
    
    # .tail,设置此标签和下个标签之间的间隔,此处是换行符
    new_ele.tail='
    '
    
    # 设置标签的内容文本:原先没有文本的话,就会创建,原来有的话,会更新
    new_ele.text = 'new_ele'
    
    # 设置标签的属性
    new_ele.attrib = {'id':'222','class':'333'}
    
    # 设置标签名
    new_ele.tag = 'Test'
    
    # 给当前结点添加子节点,放到最后面
    d.append(new_ele)
    
    # 批量添加子结点
    d.extend([new_ele,])
    
    # 插入一个子节点,插入到索引1的位置,也就是第二个
    d.insert(1,new_ele)
    
    # 这几个注释掉的方法和 ElementTree里面的一样
    # new_ele.find('.//')
    # new_ele.findall('.//')
    # new_ele.iterfind('.//div')
    # new_ele.iter()
    
    # 通过 get(),可以获取结点属性的值
    id = new_ele.get('id')
    
    # 设置结点属性(属性,属性值)
    title = new_ele.set('class','new_class')
    
    # 显示节点的属性:key() 获取所有的属性:[key1,key2...]; items() 获取属性的键值对: [(key,value),(key,value)...]
    new_ele.keys()
    new_ele.items()
    
    # 迭代自身和所有子结点的内容文本
    all_text = new_ele.itertext()
    for a in all_text:
        print(a) # a是文本哦
    
    # 写入文件 method 可以为 xml,html,text...
    tree.write('xx.html',encoding='utf8',method='html')
    
  • 相关阅读:
    雷电模拟器adb devices返回127.0.0.1:5555 offline分析和解决办法【转】
    Windows安装scoop的方法
    执行appium-doctor时提示不是内部或外部的命令的处理方法
    如何在博客园随笔里将代码显示为代码
    自动播放视频并录屏保存的python代码
    快速解决tomcat指定的服务未安装问题
    Jforum_看帖_回帖_发帖的测试用例
    使用jmeter模拟post请求在jforum论坛回帖报错
    登录probe失败的问题处理
    hadoop学习爬坑记录
  • 原文地址:https://www.cnblogs.com/wztshine/p/13945805.html
Copyright © 2011-2022 走看看