python lxml etree xpath
时间: 2025-05-06 07:13:45 浏览: 45
### Python中使用lxml库的etree模块进行XPath操作
#### 创建XML或HTML文档对象
为了执行XPath查询,首先需要创建一个`etree.ElementTree`实例。这可以通过解析字符串或者读取文件来完成。
对于HTML内容,可以利用`etree.HTML()`方法将字符串形式的HTML片段转换成可被解析的对象[^5]:
```python
from lxml import etree
html_content = "<html><body><p>Hello world</p></body></html>"
html_doc = etree.HTML(html_content)
```
而对于标准的XML,则应该采用`etree.XML()`函数[^1]:
```python
xml_content = """<library>
<book id="b1">Book One</book>
<book id="b2">Book Two</book>
</library>"""
xml_doc = etree.XML(xml_content.encode('utf-8'))
```
#### 执行基本的XPath查询
一旦拥有了文档对象,就可以调用其`.xpath()`方法并传入相应的XPath表达式来进行数据提取了。比如要找到所有的`book`标签节点:
```python
books = xml_doc.xpath('//book')
for book in books:
print(book.text.strip())
```
此段代码会遍历所有匹配到的元素,并打印它们内部的文字内容。
当涉及到更复杂的结构时,还可以通过指定路径中的具体位置或其他条件进一步细化搜索范围。例如获取表格内第二行的数据[^4]:
```python
second_row_data = html_doc.xpath('//table/tr[2]/td/text()')
print(second_row_data)
```
#### 处理带命名空间的XML文档
如果遇到含有命名空间定义的XML文档,在构建XPath语句的时候就需要特别注意。此时应当先声明好对应的映射关系,再将其作为参数传递给`.xpath()`方法[^3]。
```python
namespaces = {'ns': 'http://example.org/ns'}
elements_with_ns = xml_doc.xpath('//ns:element', namespaces=namespaces)
```
这样就能正确识别那些属于特定命名空间下的元素了。
阅读全文
相关推荐
















