![](/img/trans.png)
[英]python xml.etree.ElementTree get everything inside element whether its text or children
[英]Getting text whether or not nested inside an extra element when parsing XML
我想創建一個文本文件(下面的回購中的txt文件),其中的詩歌行位於XML文件(回購中的xml文件)中,每行都包含在“ l”標記中。 問題是,其中三行有一個令人討厭的“里程碑”元素,導致我的代碼(py文件)在寫入新文件時忽略該行。 有人可以幫忙嗎?
具體來說,我想要類似的東西:
<l><milestone ed="P" unit="Para"/>τίς τ᾽ ἄρ σφωε θεῶν ἔριδι ξυνέηκε μάχεσθαι;</l>
...的處理方式與以下情況相同:
<l>τίς τ᾽ ἄρ σφωε θεῶν ἔριδι ξυνέηκε μάχεσθαι;</l>
輸入文件來自https://github.com/DLibatique/texts/tree/master/iliad
(我知道代碼很雜亂,有很多方法可以將其干燥並更好地設置我的存儲庫結構-只是嘗試先將基本概念弄清楚,然后再對其進行整理。)
碼:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import xml.etree.ElementTree as ET
tree = ET.parse('iliad_1_1-32.xml')
root = tree.getroot()
file = open('iliad_1_1-32.txt','w')
for l in root.iter('l'):
file.write(str(l.text) + "\n")
file.close()
XML:
<?xml version="1.0" encoding="utf-8"?>
<text>
<body>
<div1 type="Book" n="1" org="uniform" sample="complete">
<milestone ed="p" n="1" unit="card"/>
<l><milestone ed="P" unit="para"/>μῆνιν ἄειδε θεὰ Πηληϊάδεω Ἀχιλῆος</l>
<l>οὐλομένην, ἣ μυρί᾽ Ἀχαιοῖς ἄλγε᾽ ἔθηκε,</l>
<l>πολλὰς δ᾽ ἰφθίμους ψυχὰς Ἄϊδι προΐαψεν</l>
<l>ἡρώων, αὐτοὺς δὲ ἑλώρια τεῦχε κύνεσσιν</l>
<l n="5">οἰωνοῖσί τε πᾶσι, Διὸς δ᾽ ἐτελείετο βουλή,</l>
<l>ἐξ οὗ δὴ τὰ πρῶτα διαστήτην ἐρίσαντε</l>
<l>Ἀτρεΐδης τε ἄναξ ἀνδρῶν καὶ δῖος Ἀχιλλεύς.</l>
<l><milestone ed="P" unit="Para"/>τίς τ᾽ ἄρ σφωε θεῶν ἔριδι ξυνέηκε μάχεσθαι;</l>
<l>Λητοῦς καὶ Διὸς υἱός: ὃ γὰρ βασιλῆϊ χολωθεὶς</l>
<l n="10">νοῦσον ἀνὰ στρατὸν ὄρσε κακήν, ὀλέκοντο δὲ λαοί,</l>
<l>οὕνεκα τὸν Χρύσην ἠτίμασεν ἀρητῆρα</l>
<l>Ἀτρεΐδης: ὃ γὰρ ἦλθε θοὰς ἐπὶ νῆας Ἀχαιῶν</l>
<l>λυσόμενός τε θύγατρα φέρων τ᾽ ἀπερείσι᾽ ἄποινα,</l>
<l>στέμματ᾽ ἔχων ἐν χερσὶν ἑκηβόλου Ἀπόλλωνος</l>
<l n="15">χρυσέῳ ἀνὰ σκήπτρῳ, καὶ λίσσετο πάντας Ἀχαιούς,</l>
<l>Ἀτρεΐδα δὲ μάλιστα δύω, κοσμήτορε λαῶν:</l>
<l>Ἀτρεΐδαι τε καὶ ἄλλοι ἐϋκνήμιδες Ἀχαιοί,</l>
<l>ὑμῖν μὲν θεοὶ δοῖεν Ὀλύμπια δώματ᾽ ἔχοντες</l>
<l>ἐκπέρσαι Πριάμοιο πόλιν, εὖ δ᾽ οἴκαδ᾽ ἱκέσθαι:</l>
<l n="20">παῖδα δ᾽ ἐμοὶ λύσαιτε φίλην, τὰ δ᾽ ἄποινα δέχεσθαι,</l>
<l>ἁζόμενοι Διὸς υἱὸν ἑκηβόλον Ἀπόλλωνα.</l>
<l><milestone ed="P" unit="para"/>ἔνθ᾽ ἄλλοι μὲν πάντες ἐπευφήμησαν Ἀχαιοὶ</l>
<l>ἀλλ᾽ οὐκ Ἀτρεΐδῃ Ἀγαμέμνονι ἥνδανε θυμῷ,</l>
<l n="25">ἀλλὰ κακῶς ἀφίει, κρατερὸν δ᾽ ἐπὶ μῦθον ἔτελλε:</l>
<l>μή σε γέρον κοίλῃσιν ἐγὼ παρὰ νηυσὶ κιχείω</l>
<l>ἢ νῦν δηθύνοντ᾽ ἢ ὕστερον αὖτις ἰόντα,</l>
<l>μή νύ τοι οὐ χραίσμῃ σκῆπτρον καὶ στέμμα θεοῖο:</l>
<l>τὴν δ᾽ ἐγὼ οὐ λύσω: πρίν μιν καὶ γῆρας ἔπεισιν</l>
<l n="30">ἡμετέρῳ ἐνὶ οἴκῳ ἐν Ἄργεϊ τηλόθι πάτρης</l>
<l>ἱστὸν ἐποιχομένην καὶ ἐμὸν λέχος ἀντιόωσαν:</l>
<l>ἀλλ᾽ ἴθι μή μ᾽ ἐρέθιζε σαώτερος ὥς κε νέηαι.</l>
</div1>
</body>
</text>
您可以使用itertext()
遍歷所有文本字段,甚至包括嵌套元素內部的文本字段(或在封閉元素的tail
,如此處所示):
for l in root.iter('l'):
file.write(''.join(l.itertext()) + "\n")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.