Hyp*_*nja 1 python xml xpath lxml findall
我正在提取关于标签的文本,我需要以列表形式获取它们 wrt p 标签。我有这个 xpath 表达式:
find = etree.XPath("//w:p//.//*[local-name() = 'ins']//text()" ,namespaces={'w':"http://schemas.openxmlformats.org/wordprocessingml/2006/main"})
Run Code Online (Sandbox Code Playgroud)
我想在findall表达式中使用它。我试过:
inserted_list_1=[]
for p in lxml_tree.findall('.//{' + w + '}p'):
inserted_list_1.append([t.text for t in p.findall('.//{' + w + '}ins')])
Run Code Online (Sandbox Code Playgroud)
但所有这些返回的是一个充满None值的列表,而前 xpath 工作得很好。
我认为缺少一些中间路径。
您不能将该表达式与findall();一起使用。该findall()方法特意保持与有限的 ElementTree API XPath 支持的兼容性。
改用该xpath()方法:
for p in lxml_tree.xpath('.//w:p', namespaces={'w': w}):
Run Code Online (Sandbox Code Playgroud)
并且只需使用名称空间前缀来进行更具可读性的查询。
如果您只想提取所有包含的文本,可以使用:
[t for t in p.xpath('../w:p//w:ins//text()',namespaces={'w': w})]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2431 次 |
| 最近记录: |