【问题标题】:Element Tree find output empty text元素树查找输出空文本
【发布时间】:2016-10-15 02:47:00
【问题描述】:

我在使用元素树提取文本时遇到问题。

我的xml文件格式是

<elecs id = 'elecs'>
    <elec id = "CLM-0001" num = "0001">
        <elec-text> blah blah blah </elec-text>
        <elec-text> blah blah blah </elec-text>
    </elec>
    <elec id = "CLM-0002" num = "0002">
         <elec-text> blah blah blah </elec-text>
         <elec-text> blah blah blah </elec-text>
    </elec>
 </elecs>

我想提取标签内的所有文字

假设我们的xml文件在变量xml中

import xml.etree.ElementTree as ET
import lxml import etree
parser = etree.XMLParser(recover = True)
contents = open(xml).read()
tree = ET.fromstring(contents, parser = parser)
elecsN = tree.find('elecs')
for element in elecsN:
    print element.text

问题是,上面的代码返回的是空字符串。我已经在我的文档中尝试了上面的代码和其他标签,它可以工作。不知道这次为什么返回空字符串。

有没有办法解决这个问题。

非常感谢

【问题讨论】:

    标签: python xml elementtree


    【解决方案1】:

    您可以简单地通过名称查找直接包含文本的元素,例如 elec-text 在这种情况下:

    >>> elec_texts = tree.findall('.//elec-text')  
    >>> for elec_text in elec_texts:                            
    ...     print elec_text.text                              
    ...                                               
     blah blah blah                                   
     blah blah blah                                   
     blah blah blah                                   
     blah blah blah        
    

    【讨论】:

      【解决方案2】:

      如果你的意思是“任何方式”,你可以使用 lxml。

      >>> from io import StringIO
      >>> html = StringIO('''\
      ... <elecs id = 'elecs'>
      ...     <elec id = "CLM-0001" num = "0001">
      ...             <elec-text> blah blah blah </elec-text>
      ...             <elec-text> blah blah blah </elec-text>            
      ...     </elec>
      ...     <elec id = "CLM-0002" num = "0002">    
      ...          <elec-text> blah blah blah </elec-text>
      ...          <elec-text> blah blah blah </elec-text>         
      ...     </elec>
      ... </elecs>
      ... '''
      ... )
      >>> from lxml import etree
      >>> doc = etree.parse(html)
      >>> doc.xpath('//elecs/elec/*/text()')
      [' blah blah blah ', ' blah blah blah ', ' blah blah blah ', ' blah blah blah ']
      

      【讨论】:

      • 忘记这个答案,看看har07提供的答案!
      猜你喜欢
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多