簡體   English   中英

python xml.etree.ElementTree獲取元素內的所有內容,無論其文本還是子元素

[英]python xml.etree.ElementTree get everything inside element whether its text or children

我正在使用xml.etree.ElementTree ,並且如果可能的話不希望更改XML解析庫。

我可以解析XML文件,沒有任何問題。 我有一個特殊的<description>標記,其中包含文本,並且想要檢索此文本。 這是我用於此目的的代碼:

import xml.etree.ElementTree as ET
rss = ET.fromstring(rss_content)
for node in rss[0].getchildren():
    if node.tag == 'description':
        print node.text

到現在為止還挺好。 但是我有時會有另一個xml內容作為文本,因此無法將其作為文本檢索。 我可以使用getchildren方法來檢索它,並進行切換以區分為文本還是XML。 但是我想知道是否可以以一種更簡單的方式直接檢索全部內容(是否為XML)作為文本?

ElementTree元素上有itertext()方法-它返回所有嵌套的文本,例如:

xmltxt='''<?xml version="1.0"?>
<TEXT>
    <Description>
        <V>played</V>
        <N>John</N>
        <PREP>with</PREP>
        <en x='PERS'>Adam</en>
        <PREP>in</PREP>
        <en x='LOC'> ASL school</en>
    </Description>
    <Description>
        <V y='0'>went</V>
        <en x='PERS'>Mark</en>
        <PREP>to</PREP>
        <en x='ORG'>United Nations</en>
        <PREP>for</PREP>
        <PREP>a</PREP>
        <N>visit</N>
    </Description>

</TEXT>
'''

root = ET.fromstring(xmltxt)

for ch in root:
    print ch
    print "".join(ch.itertext())
    print ET.tostring(ch)

輸出為:

        played
        John
        with
        Adam
        in
         ASL school

<Description>
        <V>played</V>
        <N>John</N>
        <PREP>with</PREP>
        <en x="PERS">Adam</en>
        <PREP>in</PREP>
        <en x="LOC"> ASL school</en>
    </Description>

        went
        Mark
        to
        United Nations
        for
        a
        visit

<Description>
        <V y="0">went</V>
        <en x="PERS">Mark</en>
        <PREP>to</PREP>
        <en x="ORG">United Nations</en>
        <PREP>for</PREP>
        <PREP>a</PREP>
        <N>visit</N>
    </Description>

或者要遍歷嵌套元素,請使用iter()方法,為標記內的文本收集.text,為標記后的文本收集.tail。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM