选择复选框标签python

时间:2015-11-20 13:34:40

标签: python json xml

如果有这样的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

当我打印结果变量时,结果只有[]?为什么会这样?

1 个答案:

答案 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始终会返回[]

仔细检查你真正想要迭代的内容,如果你真的想要兄弟姐妹的复选框,而不是孩子。