如果有这样的XML文档:
<!-- Location -->
<w:t>Lokacioni:</w:t>
<w:t>Kucni:</w:t>
<w:t>Extension:</w:t>
<w:t>Hajvali –Prishtinë</w:t>
<w:t>Rr. “ Dëshmorët e Gollakut “</w:t>
<w:t>P. N. Prishtinë</w:t>
<!-- Date -->
<w:t>Dat:</w:t>
<w:t>Datum:</w:t>
<w:t>Date:</w:t>
<w:t xml:space="preserve"> </w:t>
<!-- Free text - contains time and description-->
<w:t>1.</w:t><w:t>08:05 Aksident trafiku me dëme materiale Audi dhe Kombi te Kisha Graqanic</w:t>
<!-- Checkboxes - 1 means it is checked -->
<w:t>Informuar:PK</w:t><w:checkBox><w:sizeAuto/><w:default w:val="1"/></w:checkBox>
<w:t>SHME</w:t><w:checkBox><w:sizeAuto/><w:default w:val="0"/></w:checkBox>
<w:t>SHZSH</w:t><w:checkBox><w:sizeAuto/><w:default w:val="0"/></w:checkBox>
<w:t>,Shërbimet tjera</w:t><w:checkBox><w:sizeAuto/><w:default w:val="0"/></w:checkBox>
在python中,我想从包含复选框的.docx文档生成的xml中选择值。我写了这样的代码:
WordNameSpace = '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}'
para_tag = WordNameSpace + 'p'
text_tag = WordNameSpace + 't'
checkBox_tag = WordNameSpace + 'checkBox'
def get_docx_text(path):
document = zipfile.ZipFile(path)
xml_content = document.read('word/document.xml')
document.close()
tree = XML(xml_content)
paragraphs = []
for paragraph in tree.getiterator(checkBox_tag):
texts = [node.text for node in paragraph.getiterator(text_tag) if node.text]
if texts:
paragraphs.append(''.join(texts))
return paragraphs
results = get_docx_text('test.docx')
print results
当我打印结果变量时,结果只有[]
?为什么会这样?
答案 0 :(得分:0)
您正在遍历此行上的每个复选框标记(<w:checkBox>
):
for paragraph in tree.getiterator(checkBox_tag):
然后在里面你正在搜索文本标签(<w:t>
):
texts = [node.text for node in paragraph.getiterator(text_tag) if node.text]
但是,如果您查看XML文档,则您的复选框中没有任何文本,例如:
<w:checkBox><w:sizeAuto/><w:default w:val="0"/></w:checkBox>
所以paragraphs
从未添加任何内容,因此get_docx_text
始终会返回[]
。
仔细检查你真正想要迭代的内容,如果你真的想要兄弟姐妹的复选框,而不是孩子。