【问题标题】:Retrieve text between multiple <br> in xml with python使用python检索xml中多个<br>之间的文本
【发布时间】:2020-05-10 20:39:25
【问题描述】:

你好

我有如下组成的 xml 文件,我想检索 text1、text2、text3 和 text4。

<?xml version="1.0" encoding="UTF-8"?>
<TABLE>
<MAIN>
<CONTENU>
text1 <br/> text2  <br/> text3  <br/> text4
</CONTENU>
</MAIN>
</TABLE>

我已经好几天没有在 ElementTree 文档中找到解决方案了。我有以下代码,但由于&lt;br/&gt;,我只得到了第一个文本。此外,&lt;br/&gt; 的数量从一个文件到另一个文件是可变的..

import xml.etree.ElementTree as ET

tree = ET.parse(file.xml))
root = tree.getroot()

for txt in root.iter('CONTENU'):
   print(txt)

>>> text1

我该怎么做?在此先感谢:)

【问题讨论】:

  • 试试tree.find("MAIN/CONTENU").itertext()

标签: python xml xml-parsing elementtree


【解决方案1】:

尝试使用tail而不是text来获取结束标签后的内容:

import xml.etree.ElementTree as ET

XML = """<?xml version="1.0" encoding="UTF-8"?>
<TABLE>
<MAIN>
<CONTENU>
text1 <br/> text2  <br/> text3  <br/> text4
</CONTENU>
</MAIN>
</TABLE>
"""

root = ET.fromstring(XML)

for txt in root.iter('CONTENU'):
    print(txt.text)
    for c in txt.iter():
        print(c.tail)

输出:


text1 


 text2  
 text3  
 text4

【讨论】:

    【解决方案2】:

    另一种方法。

    from simplified_scrapy import SimplifiedDoc,utils,req
    html = '''
    <?xml version="1.0" encoding="UTF-8"?>
    <TABLE>
    <MAIN>
    <CONTENU>
    text1 <br/> text2  <br/> text3  <br/> text4
    </CONTENU>
    </MAIN>
    </TABLE>
    '''
    doc = SimplifiedDoc(html)
    texts = doc.select('CONTENU').getText(separator="|").split('|')
    print (texts)
    

    【讨论】:

      猜你喜欢
      • 2012-12-21
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 2019-11-27
      • 1970-01-01
      • 2020-05-04
      • 2022-11-19
      相关资源
      最近更新 更多