beautifulsoupxmlpython从特定标记中提取属性

beautifulsoupxmlpython从特定标记中提取属性,python,xml,beautifulsoup,Python,Xml,Beautifulsoup,此XML文档包含一组标记事件数据。我想从最近的事件数据中提取信息。例如,在下面的代码中,我想转到最后一个事件数据标记,转到事件日期标记并提取日期子标记的文本。目前,我正在使用Python中的BeautifulSoup遍历此文档。有什么想法吗 <?xml version="1.0" encoding="UTF-8"?> <first-tag> <second-tag> <events-da

此XML文档包含一组标记
事件数据
。我想从最近的
事件数据中提取信息。例如,在下面的代码中,我想转到最后一个
事件数据
标记,转到
事件日期
标记并提取
日期
子标记的文本。目前,我正在使用Python中的BeautifulSoup遍历此文档。有什么想法吗

    <?xml version="1.0" encoding="UTF-8"?>
        <first-tag>
          <second-tag>
            <events-data>
               <event-date>
                    <date>20040913</date>
               </event-date>
            </events-data>

          <events-data> #the one i want to traverse to grab date text
             <event-date>
               <date>20040913</date>
             </event-date>
          </events-data> 
         </second-tag>
       </first-tag>

20040913
#我想遍历它来获取日期文本
20040913

这是使用BeautifulSoup 3

import os
import sys

# Import Custom libraries
from BeautifulSoup import BeautifulStoneSoup

xml_str = \
'''
<?xml version="1.0" encoding="UTF-8"?>
    <first-tag>
      <second-tag>
        <events-data>
           <event-date>
                <date>20040913</date>
           </event-date>
        </events-data>

      <events-data>
         <event-date>
           <date>20040913</date>
         </event-date>
      </events-data> 
     </second-tag>
   </first-tag>
'''
soup = BeautifulStoneSoup(xml_str)

event_data_location = lambda x: x.name == "events-data"

events = soup.findAll(event_data_location)
if(events):
    # The last event-data
    print events[-1].text
导入操作系统
导入系统
#导入自定义库
从BeautifulSoup导入BeautifulstoneSoop
xml_str=\
'''
20040913
20040913
'''
soup=BeautifulStoneSoup(xml_str)
事件\数据\位置=lambda x:x.name==“事件数据”
events=soup.findAll(事件数据位置)
如果(事件):
#最后一个事件数据
打印事件[-1]。文本

我在想,比如在
elementtree
minidom
中,您可以根据索引和长度遍历标记,但我想不出一种语法(或找到一种语法)适用于BeautifulSoup。请记住,我对beautifulsoup还是新手。不知何故,它必须计算
事件数据发生的次数,可能是通过
numEvents=len(soup.find('events-data'))
,然后读取该索引处的子标记?这工作非常完美,谢谢!但是如果再提出一个请求,比如说在
事件日期中有更多的标签,人们会如何获取这些标签呢?我觉得这就像是打印事件[-1].text(…另一个标记…)
哦,没关系,我只会对每个子标记使用它+谢谢你,巴德!