如何使用 lxml 删除所有 XML 标签和去除空格?
How to remove all XML tags and strip spaces with the lxml?
我已尝试应用最初发布的代码 here,以删除所有 XML 标签并使用 XML 标签删除后留下的空格 lxml
图书馆:
from lxml import etree
tree = etree.parse('test.xml')
root = tree.getroot()
with open('test_out.xml', 'w') as f:
for elem in root.iter('*'):
if elem.text is not None:
elem.text = elem.text.strip()
print(elem.text)
f.write(elem.text)
我的 XML 文件:
<TEI xmlns="http://www.tei-c.org/ns/1.0" xml:lang="fr" n="5419000" xml:id="cb30263946g">
<teiHeader>
<fileDesc>
<titleStmt>
<title>Les livres classiques de l'empire de la Chine</title>
<author role="Auteur du texte" key="11909957">Confucius (0551?-0479? av. J.-C.)</author>
<respStmt>
<resp key="40">Annotateur</resp>
<name key="12176450">Pluquet, François-André-Adrien (1716-1790)</name>
</respStmt>
<respStmt>
<resp key="680">Traducteur</resp>
<name key="16653645">Noël, François (1651-1729)</name>
</respStmt>
</titleStmt>
<publicationStmt>
<publisher>TGB (BnF – OBVIL)</publisher>
</publicationStmt>
<seriesStmt>
<title level="s">Les livres classiques de l'empire de la Chine</title>
<title level="a">Tome 2</title>
<biblScope unit="volumes" n="6"/>
<idno>cb30263946g</idno>
</seriesStmt>
<sourceDesc>
<bibl>
<idno>http://gallica.bnf.fr/ark:/12148/bpt6k54190001</idno>
<publisher>Barrois aîné et Barrois jeune</publisher>
<date when="1784">1784</date>
</bibl>
</sourceDesc>
</fileDesc>
<xenoData>
<date>1784</date>
<title>Les livres classiques de l'empire de la Chine — Tome 2</title>
<dewey>950 - Histoire générale de l'Asie</dewey>
<meta-data_comprehensiveness_score>0.67</meta-data_comprehensiveness_score>
<authors>
<author_1>
<alpha_key>confucius</alpha_key>
<age_at_publication>1233</age_at_publication>
<last_name>Confucius</last_name>
<key>11909957</key>
<author>Confucius (0551?-0479? av. J.-C.)</author>
<is_reconciliated>True</is_reconciliated>
<death>0479</death>
<role>Auteur du texte</role>
<birth>0551</birth>
</author_1>
</authors>
</xenoData>
</teiHeader>
<text>
<body>
<pb xml:id="PAG_00000001" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f1.image"/>
<pb xml:id="PAG_00000002" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f2.image"/>
<pb xml:id="PAG_00000003" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f3.image"/>
<pb xml:id="PAG_00000004" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f4.image"/>
<div>
<head>Livres classiques</head>
<p rend="left">
DE L’EMPIRE .
</p>
</div>
<div>
<head>De la chine.</head>
<pb xml:id="PAG_00000005" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f5.image"/>
<pb xml:id="PAG_00000006" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f6.image"/>
<pb xml:id="PAG_00000007" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f7.image"/>
<pb xml:id="PAG_00000008" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f8.image"/>
</div>
<div>
<head>Observations</head>
<p rend="left small">SUR</p>
<p rend="center small">LES LIVRES CLASSIQUES</p>
<p rend="center small">DE L’EMPIRE</p>
<p rend="center small">DE LA CHINE.</p>
<p rend="small">.LES Chinois ont deux sortes de
livres clafliques ou canoniques : les
Kings, ou les livres canoniques du
premier ordre ; & les Ssée-chu, ou
livres canoniques dusecond ordre.</p>
<p rend="small">Les Kings sont au nombre de
cinq ; l’Y-king, le Chu-king,lc
Chi-king, le Tchun-tfiou & le Lild.</p>
<p rend="left small">L’Y-king remonte à la plus haute
<hi rend="i">Tome II. a</hi></p>
<p rend="left"><hi rend="i">'\</hi><pb xml:id="PAG_00000009" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f9.image"/>ij O B S E K.VATI ON S.</p>
<p rend="small">antiquité ; on l’attribue en grande
partie à Fo - hi : c’eft un ouvrage
qui, par le moyen des <hi rend="i">emblèmes</hi>,
explique ou repréfente la doétrine
des anciens temps fur les diverfes
opérations de la nature, fur les différents
états de la vie humaine, fur
les vertus & fur les vices , fur
les sorts heureux ou malheureux.
Ainfi, par exemple, des montagnes
sous terre fignifîent l’humilité, & la
difpolîtion ou la longueur de différentes
lignes combinées fervent à exprimer
les effets de cette vertu ( i).</p>
<p rend="small">(i) Notice de l’Y-king, par M. Vifdeîau,
à la fin de la traduction du Chufcing.</p>
<pb xml:id="PAG_00000010" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f10.image"/>
<p rend="left small">O B S E R VAT1 O N S. iij</p>
<p rend="small">Le Chu-king efl: l’hiftoire des
premiers empereurs, relativement
à la morale & à la politique, ou le
recueil de leurs principes fur la morale
& fur le gouvernement.</p>
<p rend="small">Le Chi-king efl: un recueil de
poéfies composées sous les règnes
de la troifieme race, & dans lefquelles
on décrit les moeurs, les
coutumes-, les maximes des petits
rois qui gouvernoient les provinces
sous la dépendance de l’empereur
(i).</p>
<p rend="small">Le Tchun-tfiou, c’eft-à-dire le
printemps & l’automne, efl: un ou(i) </p>
</div>
</body>
</text>
</TEI>
输出(包含大量未分隔的标记,例如ChineConfucius
、Chufcing.O B S E R VAT1 O N S.
等)
Les livres classiques de l'empire de la ChineConfucius (0551?-0479? av. J.-C.)AnnotateurPluquet, François-André-Adrien (1716-1790)TraducteurNoël, François (1651-1729)TGB (BnF – OBVIL)Les livres classiques de l'empire de la ChineTome 2cb30263946ghttp://gallica.bnf.fr/ark:/12148/bpt6k54190001Barrois aîné et Barrois jeune17841784Les livres classiques de l'empire de la Chine — Tome 2950 - Histoire générale de l'Asie0.67confucius1233Confucius11909957Confucius (0551?-0479? av. J.-C.)True0479Auteur du texte0551Livres classiquesDE L’EMPIRE .De la chine.ObservationsSURLES LIVRES CLASSIQUESDE L’EMPIREDE LA CHINE..LES Chinois ont deux sortes de
livres clafliques ou canoniques : les
Kings, ou les livres canoniques du
premier ordre ; & les Ssée-chu, ou
livres canoniques dusecond ordre.Les Kings sont au nombre de
cinq ; l’Y-king, le Chu-king,lc
Chi-king, le Tchun-tfiou & le Lild.L’Y-king remonte à la plus hauteTome II. a'\antiquité ; on l’attribue en grande
partie à Fo - hi : c’eft un ouvrage
qui, par le moyen desemblèmes(i) Notice de l’Y-king, par M. Vifdeîau,
à la fin de la traduction du Chufcing.O B S E R VAT1 O N S. iijLe Chu-king efl: l’hiftoire des
premiers empereurs, relativement
à la morale & à la politique, ou le
recueil de leurs principes fur la morale
& fur le gouvernement.Le Chi-king efl: un recueil de
poéfies composées sous les règnes
de la troifieme race, & dans lefquelles
on décrit les moeurs, les
coutumes-, les maximes des petits
rois qui gouvernoient les provinces
sous la dépendance de l’empereur
(i).Le Tchun-tfiou, c’eft-à-dire le
printemps & l’automne, efl: un ou(i)
期望的输出(每行由一个新行分隔):
Les livres classiques de l'empire de la Chine
Confucius (0551?-0479? av. J.-C.)
Annotateur
Pluquet, François-André-Adrien (1716-1790)
...
默认情况下,f.write()
不附加回车 return/line 分隔符,而 print()
附加。要获得所需的输出,请更改:
f.write(elem.text)
至:
f.write(elem.text + "\n")
此解决方案还将删除标签内多行文本的缩进。
from lxml import etree
import re
tree = etree.parse('test.xml')
root = tree.getroot()
with open('test_out.txt', 'w') as f:
for elem in root.iter('*'):
if elem.text is not None:
text = elem.text.strip()
if text:
text = text.replace("\n", "")
text = re.sub(" +", " ", text)
print(text)
f.write(text + "\n")
我已尝试应用最初发布的代码 here,以删除所有 XML 标签并使用 XML 标签删除后留下的空格 lxml
图书馆:
from lxml import etree
tree = etree.parse('test.xml')
root = tree.getroot()
with open('test_out.xml', 'w') as f:
for elem in root.iter('*'):
if elem.text is not None:
elem.text = elem.text.strip()
print(elem.text)
f.write(elem.text)
我的 XML 文件:
<TEI xmlns="http://www.tei-c.org/ns/1.0" xml:lang="fr" n="5419000" xml:id="cb30263946g">
<teiHeader>
<fileDesc>
<titleStmt>
<title>Les livres classiques de l'empire de la Chine</title>
<author role="Auteur du texte" key="11909957">Confucius (0551?-0479? av. J.-C.)</author>
<respStmt>
<resp key="40">Annotateur</resp>
<name key="12176450">Pluquet, François-André-Adrien (1716-1790)</name>
</respStmt>
<respStmt>
<resp key="680">Traducteur</resp>
<name key="16653645">Noël, François (1651-1729)</name>
</respStmt>
</titleStmt>
<publicationStmt>
<publisher>TGB (BnF – OBVIL)</publisher>
</publicationStmt>
<seriesStmt>
<title level="s">Les livres classiques de l'empire de la Chine</title>
<title level="a">Tome 2</title>
<biblScope unit="volumes" n="6"/>
<idno>cb30263946g</idno>
</seriesStmt>
<sourceDesc>
<bibl>
<idno>http://gallica.bnf.fr/ark:/12148/bpt6k54190001</idno>
<publisher>Barrois aîné et Barrois jeune</publisher>
<date when="1784">1784</date>
</bibl>
</sourceDesc>
</fileDesc>
<xenoData>
<date>1784</date>
<title>Les livres classiques de l'empire de la Chine — Tome 2</title>
<dewey>950 - Histoire générale de l'Asie</dewey>
<meta-data_comprehensiveness_score>0.67</meta-data_comprehensiveness_score>
<authors>
<author_1>
<alpha_key>confucius</alpha_key>
<age_at_publication>1233</age_at_publication>
<last_name>Confucius</last_name>
<key>11909957</key>
<author>Confucius (0551?-0479? av. J.-C.)</author>
<is_reconciliated>True</is_reconciliated>
<death>0479</death>
<role>Auteur du texte</role>
<birth>0551</birth>
</author_1>
</authors>
</xenoData>
</teiHeader>
<text>
<body>
<pb xml:id="PAG_00000001" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f1.image"/>
<pb xml:id="PAG_00000002" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f2.image"/>
<pb xml:id="PAG_00000003" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f3.image"/>
<pb xml:id="PAG_00000004" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f4.image"/>
<div>
<head>Livres classiques</head>
<p rend="left">
DE L’EMPIRE .
</p>
</div>
<div>
<head>De la chine.</head>
<pb xml:id="PAG_00000005" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f5.image"/>
<pb xml:id="PAG_00000006" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f6.image"/>
<pb xml:id="PAG_00000007" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f7.image"/>
<pb xml:id="PAG_00000008" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f8.image"/>
</div>
<div>
<head>Observations</head>
<p rend="left small">SUR</p>
<p rend="center small">LES LIVRES CLASSIQUES</p>
<p rend="center small">DE L’EMPIRE</p>
<p rend="center small">DE LA CHINE.</p>
<p rend="small">.LES Chinois ont deux sortes de
livres clafliques ou canoniques : les
Kings, ou les livres canoniques du
premier ordre ; & les Ssée-chu, ou
livres canoniques dusecond ordre.</p>
<p rend="small">Les Kings sont au nombre de
cinq ; l’Y-king, le Chu-king,lc
Chi-king, le Tchun-tfiou & le Lild.</p>
<p rend="left small">L’Y-king remonte à la plus haute
<hi rend="i">Tome II. a</hi></p>
<p rend="left"><hi rend="i">'\</hi><pb xml:id="PAG_00000009" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f9.image"/>ij O B S E K.VATI ON S.</p>
<p rend="small">antiquité ; on l’attribue en grande
partie à Fo - hi : c’eft un ouvrage
qui, par le moyen des <hi rend="i">emblèmes</hi>,
explique ou repréfente la doétrine
des anciens temps fur les diverfes
opérations de la nature, fur les différents
états de la vie humaine, fur
les vertus & fur les vices , fur
les sorts heureux ou malheureux.
Ainfi, par exemple, des montagnes
sous terre fignifîent l’humilité, & la
difpolîtion ou la longueur de différentes
lignes combinées fervent à exprimer
les effets de cette vertu ( i).</p>
<p rend="small">(i) Notice de l’Y-king, par M. Vifdeîau,
à la fin de la traduction du Chufcing.</p>
<pb xml:id="PAG_00000010" n="" corresp="http://gallica.bnf.fr/ark:/12148/bpt6k54190001/f10.image"/>
<p rend="left small">O B S E R VAT1 O N S. iij</p>
<p rend="small">Le Chu-king efl: l’hiftoire des
premiers empereurs, relativement
à la morale & à la politique, ou le
recueil de leurs principes fur la morale
& fur le gouvernement.</p>
<p rend="small">Le Chi-king efl: un recueil de
poéfies composées sous les règnes
de la troifieme race, & dans lefquelles
on décrit les moeurs, les
coutumes-, les maximes des petits
rois qui gouvernoient les provinces
sous la dépendance de l’empereur
(i).</p>
<p rend="small">Le Tchun-tfiou, c’eft-à-dire le
printemps & l’automne, efl: un ou(i) </p>
</div>
</body>
</text>
</TEI>
输出(包含大量未分隔的标记,例如ChineConfucius
、Chufcing.O B S E R VAT1 O N S.
等)
Les livres classiques de l'empire de la ChineConfucius (0551?-0479? av. J.-C.)AnnotateurPluquet, François-André-Adrien (1716-1790)TraducteurNoël, François (1651-1729)TGB (BnF – OBVIL)Les livres classiques de l'empire de la ChineTome 2cb30263946ghttp://gallica.bnf.fr/ark:/12148/bpt6k54190001Barrois aîné et Barrois jeune17841784Les livres classiques de l'empire de la Chine — Tome 2950 - Histoire générale de l'Asie0.67confucius1233Confucius11909957Confucius (0551?-0479? av. J.-C.)True0479Auteur du texte0551Livres classiquesDE L’EMPIRE .De la chine.ObservationsSURLES LIVRES CLASSIQUESDE L’EMPIREDE LA CHINE..LES Chinois ont deux sortes de
livres clafliques ou canoniques : les
Kings, ou les livres canoniques du
premier ordre ; & les Ssée-chu, ou
livres canoniques dusecond ordre.Les Kings sont au nombre de
cinq ; l’Y-king, le Chu-king,lc
Chi-king, le Tchun-tfiou & le Lild.L’Y-king remonte à la plus hauteTome II. a'\antiquité ; on l’attribue en grande
partie à Fo - hi : c’eft un ouvrage
qui, par le moyen desemblèmes(i) Notice de l’Y-king, par M. Vifdeîau,
à la fin de la traduction du Chufcing.O B S E R VAT1 O N S. iijLe Chu-king efl: l’hiftoire des
premiers empereurs, relativement
à la morale & à la politique, ou le
recueil de leurs principes fur la morale
& fur le gouvernement.Le Chi-king efl: un recueil de
poéfies composées sous les règnes
de la troifieme race, & dans lefquelles
on décrit les moeurs, les
coutumes-, les maximes des petits
rois qui gouvernoient les provinces
sous la dépendance de l’empereur
(i).Le Tchun-tfiou, c’eft-à-dire le
printemps & l’automne, efl: un ou(i)
期望的输出(每行由一个新行分隔):
Les livres classiques de l'empire de la Chine
Confucius (0551?-0479? av. J.-C.)
Annotateur
Pluquet, François-André-Adrien (1716-1790)
...
f.write()
不附加回车 return/line 分隔符,而 print()
附加。要获得所需的输出,请更改:
f.write(elem.text)
至:
f.write(elem.text + "\n")
此解决方案还将删除标签内多行文本的缩进。
from lxml import etree
import re
tree = etree.parse('test.xml')
root = tree.getroot()
with open('test_out.txt', 'w') as f:
for elem in root.iter('*'):
if elem.text is not None:
text = elem.text.strip()
if text:
text = text.replace("\n", "")
text = re.sub(" +", " ", text)
print(text)
f.write(text + "\n")