【发布时间】:2021-04-18 03:51:35
【问题描述】:
我一直在关注使用 .//x[not(ancestor::w:tbl)] 形式的 XPath not ancestor 选择器的示例,但它的行为与我预期的不同。
我正在解析一个包含表格的 Word DOCX 文件。我正在使用 python lxml 库将其解析为 XML。我想获取在其祖先树中的任何位置都没有表格元素的段落项目。
我在控制台中输入以下内容:
selector = './/w:p[not(ancestor::w:drawing)][not(ancestor::w:tbl)][not(ancestor::v:textbox)][not(ancestor::wps:wsp)][not(ancestor::mc:Fallback)]
nsDict = {k:v for k,v in doc.nsmap.items() if k}
paragraphs = doc.xpath(selector,namespaces=nsDict)
for p in paragraphs:
print(bool(p.xpath(".//ancestor::w:tbl",namespaces=nsDict)))
>>>>False
>>>>False
>>>>False
>>>>False
>>>>False
>>>>False
>>>>True
>>>>False
预期的行为是段落 xpath 选择器与父文档元素级 xpath 选择器互斥。段落布尔检查应始终为False。
如何修改我的初始选择器,以便不选取以 w:tbl 为祖先的元素?
【问题讨论】:
标签: python xml xpath lxml openxml