一、parsefromstring函数是什么
parsefromstring函数是Python中常用的用于解析xml或者html字符串的函数。该函数可以将字符串解析成ElementTree或Element对象,从而更方便的进行字符串的操作。
二、parsefromstring函数的参数说明
parsefromstring(string: str, parser=None) -> xml.etree.ElementTree.Element
parsefromstring函数有两个参数,其中string参数是必选的,表示要解析的xml或者html字符串,parser是可选的,表示使用哪种解析器进行解析,默认使用系统自带的解析器。
在实际应用中,需要注意的是,使用parsefromstring解析本地文件时,应该使用parse函数,如下所示:
import xml.etree.ElementTree as ET tree = ET.parse('example.xml') root = tree.getroot()
三、对字符串进行解析
小标题1:解析xml字符串
使用parsefromstring函数可以轻松的解析xml字符串。示例代码如下:
import xml.etree.ElementTree as ET xml_str = '<person><name>John</name><age>30</age></person>' root = ET.fromstring(xml_str)
执行上述代码后,将得到一个Element对象,可以方便的对xml进行操作。获取节点内容的代码如下:
name = root.find('name').text age = root.find('age').text
小标题2:解析html字符串
除了解析xml字符串,parsefromstring函数也可以解析html字符串。但需要注意的是,html字符串的解析需要使用html.parser解析器,如下所示:
import xml.etree.ElementTree as ET html_str = '<html><body><h1>Hello World</h1></body></html>' root = ET.fromstring(html_str, parser=ET.HTMLParser())
执行上述代码后,同样可以得到一个Element对象,可以方便的对html进行操作。获取标题节点内容的代码如下:
title = root.find('body/h1').text
四、解析带有命名空间的xml字符串
在实际的开发中,会遇到带有命名空间的xml字符串,需要对其进行解析。可以使用register_namespace函数来注册命名空间,示例代码如下:
import xml.etree.ElementTree as ET ns_map = {'xmlns:ns': 'http://www.example.com/namespace'} xml_str = '<ns:person><ns:name>John</ns:name><ns:age>30</ns:age></ns:person>' root = ET.fromstring(xml_str) ET.register_namespace('ns', ns_map['xmlns:ns']) name = root.find('ns:name', ns_map).text age = root.find('ns:age', ns_map).text
五、解析带有CDATA的xml字符串
在xml中,有些特殊字符内容需要用到CDATA进行包含,parsefromstring函数也可以对其进行解析,示例代码如下:
import xml.etree.ElementTree as ET xml_str = '<person><name><![CDATA[John]]></name><age>30</age></person>' root = ET.fromstring(xml_str) name = root.find('name').text
执行上述代码后,可以得到一个正常的Element对象。