LXML:是否可以在元素内搜索?
LXML: Is it possible to search within an element?
我习惯于 Beautifulsoup 提取元素然后在其中搜索。但是 LXML 看不到那样的行为,看起来它正在从主文档中搜索。
从下面的例子中,我得到的输出是:
案例:1
- 条件:1
- 条件:2
- 条件:3
- 条件:4
案例:2
- 条件:1
- 条件:2
- 条件:3
- 条件:4
但我的预期是:
案例:1
- 条件:1
- 条件:2
案例:2
- 条件:3
- 条件:4
示例代码:
from lxml.html import fromstring, tostring
html = """
<p>Test document</p>
<case id='1'>
<criteria id='1'><p>Some text</p></criteria>
<criteria id='2'><p>Some more text</p></criteria>
</case>
<case id='2'>
<criteria id='3'><p>It just keeps going</p></criteria>
<criteria id='4'><p>Will it never end?</p></criteria>
</case>
"""
doc = fromstring(html)
case_list = doc.xpath('//case')
for case in case_list:
print('Case: ', case.get('id'))
criteria_list = case.xpath('//criteria')
for criteria in criteria_list:
print(' - Criteria: ', criteria.get('id'))
问题可能出在这一行:
criteria_list = case.xpath('//criteria')
尝试将 XPath 表达式从“//criteria”(从根搜索文档)替换为“./criteria”(从当前元素搜索):
criteria_list = case.xpath('./criteria')
我习惯于 Beautifulsoup 提取元素然后在其中搜索。但是 LXML 看不到那样的行为,看起来它正在从主文档中搜索。
从下面的例子中,我得到的输出是:
案例:1
- 条件:1
- 条件:2
- 条件:3
- 条件:4
案例:2
- 条件:1
- 条件:2
- 条件:3
- 条件:4
但我的预期是:
案例:1
- 条件:1
- 条件:2
案例:2
- 条件:3
- 条件:4
示例代码:
from lxml.html import fromstring, tostring
html = """
<p>Test document</p>
<case id='1'>
<criteria id='1'><p>Some text</p></criteria>
<criteria id='2'><p>Some more text</p></criteria>
</case>
<case id='2'>
<criteria id='3'><p>It just keeps going</p></criteria>
<criteria id='4'><p>Will it never end?</p></criteria>
</case>
"""
doc = fromstring(html)
case_list = doc.xpath('//case')
for case in case_list:
print('Case: ', case.get('id'))
criteria_list = case.xpath('//criteria')
for criteria in criteria_list:
print(' - Criteria: ', criteria.get('id'))
问题可能出在这一行:
criteria_list = case.xpath('//criteria')
尝试将 XPath 表达式从“//criteria”(从根搜索文档)替换为“./criteria”(从当前元素搜索):
criteria_list = case.xpath('./criteria')