我们使用联盟链接。它们让我们能够维持运营,而您无需承担任何费用。

如何使用 LXML 解析 XML

有关如何使用 LXML 解析 XML 的分步指南。

重要提示:本文假设您熟悉 XML 数据结构。请参阅 W3Schools XML 教程 如果你需要复习。

步骤 1。 使用 pip 安装 LXML。

				
					pip install lxml
				
			
TIPS: LXML 文档。如果您在 Python 中使用 LXML,请导入 模块。
				
					from lxml import etree
				
			
步骤 2。 加载要使用的 XML 文件。有两种方法可以执行此操作:1) 从系统上的 .xml 文件加载;2) 发出 HTTP 请求以从 Internet 获取 XML 内容。 TIPS: 两种方法的解析略有不同: 解析文档其他解析选项. 1. 从系统上的 .xml 文件
				
					filename = "file/location.xml"
parser = etree.XMLParser()
tree = etree.parse(filename, parser)
				
			

2. 发出 HTTP 请求从互联网获取 XML 内容。

				
					r=requests.get('https://www.w3schools.com/xml/simple.xml')
tree = etree.XML(r.content)
				
			
注意:在这两种情况下,结果都会被解析并保存在 元素树 对象并保存在  变量。 步骤 3。 您需要了解 LXML 元素树 类和 XPath 选择器,用于以下步骤。查看一些教程: LXML 教程XPath 教程. 步骤 4。 让我们继续你一直在研究的代码示例。我们将获取 XML 示例.XML 数据:
				
					<breakfast_menu>
<food>
<name>Belgian Waffles</name>
<price>$5.95</price>
<description>Two of our famous Belgian Waffles with plenty of real maple syrup</description>
<calories>650</calories>
</food>
<food>
<name>Strawberry Belgian Waffles</name>
<price>$7.95</price>
<description>Light Belgian waffles covered with strawberries and whipped cream</description>
<calories>900</calories>
</food>
<food>
<name>Berry-Berry Belgian Waffles</name>
<price>$8.95</price>
<description>Light Belgian waffles covered with an assortment of fresh berries and whipped cream</description>
<calories>900</calories>
</food>
<food>
<name>French Toast</name>
<price>$4.50</price>
<description>Thick slices made from our homemade sourdough bread</description>
<calories>600</calories>
</food>
<food>
<name>Homestyle Breakfast</name>
<price>$6.95</price>
<description>Two eggs, bacon or sausage, toast, and our ever-popular hash browns</description>
<calories>950</calories>
</food>
</breakfast_menu>
				
			

我们来看看示例的 XML 树:

步骤 5。 要获取名称,你首先需要找到一个 <姓名> 每个元素  节点并从中获取文本数据。这可以通过以下代码行完成:

				
					foods = tree.xpath(".//food/name/text()")
				
			
  1. 。//食物 – 查找并选择XML 中任意位置的元素
  2. /姓名 – 选择孩子
  3. /文本() – 获取包含在标签。


注意:
 此 食品 变量将包含 XML 文档中找到的所有食物名称的列表。

步骤 6。 让我们通过将脚本的输出打印到终端窗口来检查脚本是否有效。

				
					for food in foods:
    print (food)
				
			

这是 脚本的输出。它显示您刚刚抓取的名称。

				
					python lxml_get_text.py
Belgian Waffles
Strawberry Belgian Waffles
Berry-Berry Belgian Waffles
French Toast
Homestyle Breakfast
				
			

结果:
恭喜,您刚刚学会了如何使用 LXML 解析 XML。以下是完整脚本:

				
					from lxml import etree
import requests
r=requests.get('https://www.w3schools.com/xml/simple.xml')
tree = etree.XML(r.content)
foods = tree.xpath(".//food/name/text()")
for food in foods:
    print (food)