首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从标签及其下面的标签中获取文本

从标签及其下面的标签中获取文本
EN

Stack Overflow用户
提问于 2016-12-10 02:35:48
回答 2查看 2.2K关注 0票数 1

我有一个很长的文件,经常重复使用标签。我需要任意数量的两种标记类型的文本(虽然我不需要来自该类型的每个标记的文本)。

下面是xml文件的一个片段:

代码语言:javascript
复制
<key>category</key>
<string>Utilities</string>
<key>description</key>
<string></string>
<key>developer</key>
<string></string>
<key>display_name</key>
<string>PaperCut Client</string>
<key>icon_hash</key>
<string>0db77f1181a63838123e5b25607be0b9b7e32432d11ec3f370ddde1a7807f3fc</string>
<key>installer_item_hash</key>
<string>ebe1f3093bf20f0c6524e79005b37f932dcfe0166a0d740d985450e7a55f9ca0</string>
<key>installer_item_location</key>
<string>PCClient-13.5.dmg</string>
<key>installer_item_size</key>
<integer>45941</integer>
<key>installer_type</key>
<string>copy_from_dmg</string>
<key>installs</key>

我需要提取的是键标签的文本,然后紧跟在它后面的字符串标记:

代码语言:javascript
复制
<key>'identifier'</key>
<string>'desired text'</string>

我可以通过以下方式返回所有display_name标记:

代码语言:javascript
复制
soup.findAll('key', string="display_name")

但这将返回标记和字符串__name。我只需要“display_name”和下面标签中的文本(字符串标记中的文本,例如:“PaperCut客户”)。我怎样才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-10 04:55:18

代码语言:javascript
复制
xml = '''
<key>category</key>
<string>Utilities</string>
<key>description</key>
<string></string>
<key>developer</key>
<string></string>
<key>display_name</key>
<string>PaperCut Client</string>
<key>icon_hash</key>
<string>0db77f1181a63838123e5b25607be0b9b7e32432d11ec3f370ddde1a7807f3fc</string>
<key>installer_item_hash</key>
<string>ebe1f3093bf20f0c6524e79005b37f932dcfe0166a0d740d985450e7a55f9ca0</string>
<key>installer_item_location</key>
<string>PCClient-13.5.dmg</string>
<key>installer_item_size</key>
<integer>45941</integer>
<key>installer_type</key>
<string>copy_from_dmg</string>
<key>installs</key>'''
soup = BeautifulSoup(xml, 'lxml')
keys = soup.find_all('key', string='display_name')
for key in keys:
    string = key.next_sibling.next_sibling
    print(key.text)
    print(string.text)

退出:

代码语言:javascript
复制
display_name
PaperCut Client
票数 0
EN

Stack Overflow用户

发布于 2016-12-10 03:43:51

如果keystring总是成对出现并保持相同的顺序(我认为应该是这样,否则整个xml文件最终会陷入混乱),您可以这样做:

代码语言:javascript
复制
for key_tag, string_tag in zip(soup.find_all('key'), soup.find_all('string')):
    print key_tag.text, string_tag.text
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41071603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档