您的位置:

解析parsefromstring函数详解

一、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对象。