I have the following piece of xml:
<w:p>
<w:r>
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
<w:sz w:val="24"/>
<w:szCs w:val="24"/>
<w:lang w:val="en-US"/>
</w:rPr>
<w:fldChar w:fldCharType="begin"/>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
<w:sz w:val="24"/>
<w:szCs w:val="24"/>
<w:lang w:val="en-US"/>
</w:rPr>
<w:instrText xml:space="preserve"> ADDIN EN.CITE <EndNote><Cite><Author>Su</Author><Year>2010</Year><RecNum>130</RecNum>toethanol/metabolism</keyword><keyword>Molecular Sequence Data</keyword><keyword>Mutagenesis, Insertional</keyword><keyword>Sequence Alignment</keyword><keyword>/genetics/*metabolism</keyword></keywords><dates></EndNote></w:instrText>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
<w:sz w:val="24"/>
<w:szCs w:val="24"/>
<w:lang w:val="en-US"/>
</w:rPr>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
<w:sz w:val="24"/>
<w:szCs w:val="24"/>
<w:lang w:val="en-US"/>
</w:rPr>
<w:t>(ABCD et al. 2006)</w:t>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
<w:sz w:val="24"/>
<w:szCs w:val="24"/>
<w:lang w:val="en-US"/>
</w:rPr>
<w:fldChar w:fldCharType="end"/>
</w:r>
</w:p>
我想要做的是,搜索w:fldChar
與價值"begin"
,如果發現,將一個等級可達w:r
和搜索w:instrText
其中應包含文本「ADDIN EN.CITE
」和如果這樣做,去一個級別爲w:再次R和提取包含在後面接下來的w:t
標籤的文本..條件遍歷所有W¯¯,R兄妹
我嘗試以下,但它產生了什麼:
text = ""
w = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'
for p in source.xpath('.//w:p',namespaces={'w':w}):
text+= " "
for q in p.xpath('.//w:fldChar[@w:fldCharType="begin"]',namespaces={'w':w}): #search for w:fldchar
for t in q.xpath('/../..//w:instrText[contains(text(),"ADDIN EN.CITE")]/..//w:r',namespaces={'w':w}): #check for addin en cite
for r in t.itersiblings(tag = '{'+w+'}r'): #iterate over siblings of w:r
if r.xpath('.//w:t',namespaces={'w':w}): #if w:t in the sibling , extract text and break..
text+= r.text
break
我會出錯?問題似乎與q.xpath聲明..
我想在第3個w:r標籤中提取文本。但在此之前,我需要檢查第二個運行標記是否帶有文本插件引用的w:instrtext。如果有,然後提取文本,否則不。.. – 2014-11-21 03:12:12
如何使用「下面的兄弟姐妹」,而不是?如[鏈接](http://www.w3schools.com/xpath/xpath_axes.asp)中所述。我仍然面臨着它的問題..只需要提取任何兄弟姐妹下的第一個文本,然後打破.. – 2014-11-21 04:52:37
@Swordy:你的要求仍然不清楚。在你原來的問題中,你說你想從w:t元素中提取文本。但是在這裏你說你想在第三個w:r元素中提取文本,它沒有w:t子。我很困惑。 – LarsH 2014-11-21 16:56:00