Ошибка атрибута с документом .docx без атрибута 'xpath' - PullRequest
0 голосов
/ 28 апреля 2019
from docx import *
document = Document(r'filepath.docx')
words = document.xpath('//w:r', namespaces=document.nsmap)
WPML_URI = '{http://schemas.openxmlformats.org/wordprocessingml/2006/main'
tag_rPr = WPML_URI + 'rPr'
tag_highlight = WPML_URI + 'highlight'
tag_val = WPML_URI + 'val'
tag_t = WPML_URI + 't'
for word in words:
    for rPr in word.findall(tag_rPr):
        high = rPr.findall(tag_highlight)
        for hi in high:
            if hi.attribute[tag_val] == 'yellow':
                print(word.find(tag_t).text.encode('utf-8').lower())

этот код теоретически должен получить текст документа, а затем найти выделенный текст желтым цветом, но моя проблема в начале, я запускаю код как есть, и я получаю AttributeError: 'Document' object has no attribute 'xpath' как сообщение об ошибке. его проблема, по-видимому, связана с words = document.xpath('//w:r', namespaces=document.nsmap) и я не знаю, как исправить

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

@ PirateNinjas прямо сейчас. Объект Document не имеет подкласса lxml.etree._Element и поэтому не имеет метода .xpath(). Это то, что указывает AttributeError; каждый метод объекта является атрибутом (так же, как и переменная экземпляра), и, если метод с именем, которое вы запрашиваете, отсутствует, вы получите эту ошибку.

Однако Document._element делает подклассом _Element и может работать для вас. По крайней мере, это не даст вам этой ошибки и должно двигаться дальше в правильном направлении. Этот код должен предоставить вам все элементы <w:r> в основной истории документа (т.е. тело документа, но не заголовки, сноски и т. Д.):

rs = document._element.xpath("//w:r")
0 голосов
/ 28 апреля 2019

Проблема в том, что вы пытаетесь что-то сделать с docx.Document, что не разрешено.Если вы посмотрите здесь , вы можете увидеть документацию для этого и .xpath не существует для Document.

Если вам нужны слова, вы, вероятно, можете получить их с помощью метода Document.paragraph - также в связанных документах.

...