Python3解析XML:ElementTree与XPath语法详解

16 下载量 31 浏览量 更新于2023-05-11 收藏 48KB PDF 举报
"Python3 xml.etree.ElementTree支持的XPath语法详解" XPath是一种在XML文档中查找信息的语言,它被用于选取XML文档中的节点,如元素、属性、文本等。Python的`xml.etree.ElementTree`模块提供了一部分XPath的支持,虽然不完全符合W3C的XPath规范,但足以满足大部分XML解析需求。以下是对`xml.etree.ElementTree`支持的XPath语法的详细解释: 1. **tag** `tag`用于查找所有具有指定标签名的子元素。例如,`country`将匹配所有名为`country`的元素,`country/rank`则会找到所有`country`元素下的`rank`元素。 2. **\*** `\*`通配符用于匹配任何元素。例如,`*/rank`将匹配所有级别上的`rank`元素,这些元素都是当前元素的子孙。 3. **.** `.`符号代表当前元素。在XPath表达式中使用,表示从当前元素开始进行匹配。 4. **//** 双斜线`//`用于选择当前元素下所有级别的子元素。但是,`ElementTree`不支持以`//`开头的表达式。 5. **..** `..`代表父元素。如果已到达根元素,返回None或者空列表。在调用`find`或`findall`方法的元素就是起始元素。 6. **[@attrib]** `[@attrib]`用于查找具有指定属性`attrib`的所有子元素。 7. **[@attrib='value']** `[@attrib='value']`选择具有特定属性值的元素。值应不包含引号,例如,`[@gdp='13.572']`会找到`gdp`属性等于`13.572`的元素。 8. **[tag]** `[tag]`选择所有拥有名为`tag`子元素的元素。 9. **[.='text']** 自Python3.7开始,`[.='text']`选择元素(或其子元素)的完整文本内容为指定的`text`值的元素。 10. **[tag='text']** `[tag='text']`选择元素(或其子元素)名为`tag`且其文本内容等于`text`的元素。 11. **[position]** `[position]`选取在给定位置的元素,`position`可以是1开始的整数、`last()`表达式或相对于最后一个位置的位置(如:`last()-1`)。位置前面必须有一个标签名、星号或其他方括号表达式。 在实际应用中,这些语法可以组合使用,以更复杂的方式定位XML文档中的特定节点。例如,`data/country[1]/gdp`将选取`data`元素的第一个`country`子元素的`gdp`子元素。而`*[contains(text(), 'Liechtenstein')]`将找到包含字符串"Liechtenstein"的任何元素的文本内容。 通过以上介绍,我们了解到`xml.etree.ElementTree`模块虽然在XPath支持上存在限制,但依然提供了足够的功能来处理常见的XML解析任务。在处理XML数据时,正确使用这些语法可以极大地提高代码的效率和可读性。