寻找相当于xpath,Lxml

问题描述:

我正在提取关于标签的文本,我需要以列表形式将它们以w.r.t p标签的形式提取出来。我有这样的XPath表达式为:寻找相当于xpath,Lxml

find = etree.XPath("//w:p//.//*[local-name() = 'ins']//text()" ,namespaces={'w':"http://schemas.openxmlformats.org/wordprocessingml/2006/main"}) 

,我想在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')]) 

但是,这一切返回的是一个充满None值的列表,而前者的xpath完美地工作。
我认为有一些中间路径丢失。

你不能在findall()中使用该表达式; findall()方法故意保持与limited ElementTree API XPath support的兼容性。

使用xpath() method代替:

for p in lxml_tree.xpath('.//w:p', namespaces={'w': w}): 

,只是使用的命名空间前缀更可读的查询。

如果你只是想提取所有包含的文本,你可以使用:

[t for t in p.xpath('../w:p//w:ins//text()',namespaces={'w': w})] 
+0

和我应该用什么文字? t.text似乎不起作用。 – 2014-10-01 10:38:54

+0

@Swordy:你确定这些'ins'元素中直接包含文本吗? – 2014-10-01 10:47:22

+0

@MartijnPieters不,没有。很可能这是OOXML的一种方言,其中的文本在'w:ins/w:r/w:t'里面。所以'w:ins // text()'可以正常工作。 +1。 – 2014-10-02 22:10:04