从xml文件中提取文本

时间:2016-04-22 15:40:51

标签: xml python-3.4

我正在尝试从XML文件中提取文本,但我没有得到我期望的结果。

这是我试图解析的XML片段,用于说明我的问题:

<texto_Quijote_I>
<bloque nombre="prologo">
<autor>
Desocupado lector: sin juramento me podrás creer que quisiera que este;
como será poner, tratando de libertad y cautiverio:
<cita_latin>   Non bene pro toto libertas venditur auro.</cita_latin>
Y luego, en el margen, citar a Horacio, o a quien lo dijo. Si tratáredes
del poder de la muerte, acudir luego con:
<cita_latin>
   Pallida mors aequo pulsat pede pauperum tabernas,
   Regumque turres.
</cita_latin>
Si de la amistad y amor que Dios manda que se tenga al enemigo, entraros
luego al punto por la Escritura Divina, que lo podéis hacer con tantico de
curiosidad, y decir las palabras, por lo menos, del mismo Dios:
<cita_latin>Ego autem dico vobis: diligite inimicos vestros</cita_latin>. 
Si tratáredes de malos pensamientos,
acudid con el Evangelio: 
<cita_latin>De corde exeunt cogitationes malae</cita_latin>. 
Si de la instabilidad de los amigos, ahí está Catón, que os dará su dístico:
<cita_latin>
   Donec eris felix, multos numerabis amicos,
   tempora si fuerint nubila, solus eris.
</cita_latin>
Y con estos latinicos y otros tales os tendrán siquiera por gramático, que
Y con esto, Dios te dé salud, y a mí no olvide. Vale.
</autor>
</bloque>
</texto_Quijote_I>

我试图提取某些标签之间的所有文字。例如,为了获得<autor>..</autor>标签之间的所有文本,我试图这样做:

import xml.etree.ElementTree as ET
tree = ET.parse("file.xml")
root = tree.getroot()
text = ""
for n in root.findall(".//autor"):
    text += n.text

但是当我检查字符串时,我只能得到:

"Desocupado lector: sin juramento me podrás creer que quisiera que este;
como será poner, tratando de libertad y cautiverio:"

它应该如何运作?我希望得到<autor></autor>之间的所有文字。

1 个答案:

答案 0 :(得分:0)

你必须向孩子们进行迭代,并从那里收集文本。

另外,我利用&#34; tail&#34;因为它捕获标签之间的信息。引自文档:

  

如果元素是从XML文件创建的,则text属性成立   元素的开始标记与其第一个子标记之间的文本   结束标记或无, tail属性包含文本之间的文本   元素的结束标记和下一个标记,或无。

tree = ET.parse("file.xml")
root = tree.getroot()
text = ""
for n in root.findall(".//autor"):
    text += n.text
    text += n.tail
    for x in n:
        text += x.text
        text += x.tail

print text

结果

Desocupado lector: sin juramento me podrás creer que quisiera que este;
como será poner, tratando de libertad y cautiverio:

   Non bene pro toto libertas venditur auro.
Y luego, en el margen, citar a Horacio, o a quien lo dijo. Si tratáredes
del poder de la muerte, acudir luego con:

   Pallida mors aequo pulsat pede pauperum tabernas,
   Regumque turres.

Si de la amistad y amor que Dios manda que se tenga al enemigo, entraros
luego al punto por la Escritura Divina, que lo podéis hacer con tantico de
curiosidad, y decir las palabras, por lo menos, del mismo Dios:
Ego autem dico vobis: diligite inimicos vestros. 
Si tratáredes de malos pensamientos,
acudid con el Evangelio: 
De corde exeunt cogitationes malae. 
Si de la instabilidad de los amigos, ahí está Catón, que os dará su dístico:

   Donec eris felix, multos numerabis amicos,
   tempora si fuerint nubila, solus eris.

Y con estos latinicos y otros tales os tendrán siquiera por gramático, que
Y con esto, Dios te dé salud, y a mí no olvide. Vale.