Tôi đang cố phân tích nội dung trong bảng tính ODS của OpenOffice. Định dạng ods về cơ bản chỉ là một tệp zip với một số tài liệu. Nội dung của bảng tính được lưu trữ trong 'content.xml'.Làm cách nào để sử dụng không gian tên xml với tìm/tìm thấy trong lxml?
import zipfile
from lxml import etree
zf = zipfile.ZipFile('spreadsheet.ods')
root = etree.parse(zf.open('content.xml'))
Nội dung của bảng tính là trong một tế bào:
table = root.find('.//{urn:oasis:names:tc:opendocument:xmlns:table:1.0}table')
Chúng tôi cũng có thể đi thẳng cho các hàng:
rows = root.findall('.//{urn:oasis:names:tc:opendocument:xmlns:table:1.0}table-row')
Các yếu tố cá nhân biết về không gian tên:
>>> table.nsmap['table']
'urn:oasis:names:tc:opendocument:xmlns:table:1.0'
Cách thực hiện Tôi sử dụng các không gian tên trực tiếp trong find/findall?
Giải pháp rõ ràng không hoạt động.
Đang cố gắng để có được các hàng từ bảng:
>>> root.findall('.//table:table')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "lxml.etree.pyx", line 1792, in lxml.etree._ElementTree.findall (src/lxml/lxml.etree.c:41770)
File "lxml.etree.pyx", line 1297, in lxml.etree._Element.findall (src/lxml/lxml.etree.c:37027)
File "/usr/lib/python2.6/dist-packages/lxml/_elementpath.py", line 225, in findall
return list(iterfind(elem, path))
File "/usr/lib/python2.6/dist-packages/lxml/_elementpath.py", line 200, in iterfind
selector = _build_path_iterator(path)
File "/usr/lib/python2.6/dist-packages/lxml/_elementpath.py", line 184, in _build_path_iterator
selector.append(ops[token[0]](_next, token))
KeyError: ':'
Bạn đã cố gắng sử dụng Python API cho OpenOffice để xử lý bảng tính? – jfs
Xin chào, tôi đang sử dụng etree.QName để truy cập Phần tử và thuộc tính với Không gian tên. một cách gọn gàng với sự giúp đỡ của một từ điển không gian tên, và nó hoạt động với phương pháp find và findall. để biết thêm thông tin, vui lòng tham khảo: http://lxml.de/tutorial.html#namespaces –