0

我希望能够通过文本值搜索 xml 格式的文件并返回它所属的 id。我在 xml 命令中查看了 python 库,但只看到了按元素/节点搜索的示例。我在下面有一个简化的 xml 示例,例如,我想搜索“3x3 Eyes”并返回“2”。它还应该搜索确切的文本减去大小写。每个动漫下通常会有多个标题条目,因此搜索可以在第一场比赛中停止。谢谢

<?xml version="1.0" encoding="UTF-8"?>
<animetitles>
  <anime aid="1">
    <title type="official" xml:lang="fr">Crest of the Stars</title>
    <title type="official" xml:lang="fr">Crest of the Stars</title>
  </anime>
  <anime aid="2">
    <title type="official" xml:lang="en">3x3 Eyes</title>
  </anime>
  <anime aid="3">
    <title type="official" xml:lang="en">3x3 Eyes: Legend of the Divine Demon</title>
  </anime>
</animetitles>
4

2 回答 2

1
tree = et.parse( ... )

# Unique match
results = []
for anime in tree.findall('anime'):
    for title in anime.findall('title'):
        if title.text == '3x3 Eyes':
            results.append(anime.get('aid'))
print results

# Everything that starts with
results = []
for anime in tree.findall('anime'):
    for title in anime.findall('title'):
        if title.text.startswith('3x3 Eyes'):
            results.append(anime.get('aid'))
print results

第一个返回[2],第二个[2, 3]

或者更神秘一点,但是,嘿,为什么不呢:)

results = [anime.get('aid') for anime in tree.findall('anime')
           for title in anime.findall('title') if title.text == '3x3 Eyes']
于 2013-08-18T01:19:41.967 回答
0

您可以将 ElementTree 用于您的目的。

import xml.etree.ElementTree as ET
tree = ET.parse('a.xml')
root = tree.getroot()

def findParentAttrib(string):
    for neighbor in root.iter():
        for parent in neighbor.getiterator():
            for child in parent:
                if child.text == string:
                    return parent.attrib['aid']

print findParentAttrib("3x3 Eyes") # returns 2

另请参阅此页面

于 2013-08-18T01:37:44.610 回答