2016-04-22 25 views
2

XMLファイルからテキストを抽出しようとしていますが、期待した結果が得られません。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>の間のすべてのテキストを得ることを期待していた。

+0

文書は、テキストのみのタグのテキストの内容を示しているという。他のものはテキストの一部ではありません(集合とサブセット理論?): 'Element.findall()は、現在の要素の直接の子であるタグを持つ要素だけを見つけます。 Element.find()は特定のタグを持つ最初の子を見つけ、Element.textは要素のテキストコンテンツにアクセスします。 Element.get()は要素の属性にアクセスします: ' また、' xml.etree.ElementTreeモジュールは悪意のあるデータに対して安全ではありません。信頼できないデータや認証されていないデータを解析する必要がある場合は、XMLの脆弱性を参照してください。 – Adib

答えて

0

子供たちに反復して、そこからテキストを収集する必要があります。

また、タグ間の情報をキャプチャするため、「テール」を使用しました。ドキュメントからの引用:要素はXMLファイルから作成された場合

、テキスト属性は 要素の開始タグとその最初の子または 終了タグの間のテキスト、またはNone、およびのいずれかを保持していますtail属性は、 の要素の終了タグと次のタグの間のテキスト、またはNoneのいずれかを保持します。

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. 
+1

ありがとう、 "tail"メソッドが私が望むテキストを抽出しています。 – Wunter

関連する問題