我正在使用xml.etree来解析一些我需要用Python导入数据库的巨大XML文件,但出于某种原因,我无法弄清楚如何提取特定的标签基于不同标签的属性
例如,在下面包含的这段XML中,我需要提取NicamWarningCS标记下的标记文本,并将它们放在一个列表中。有关如何实现这一目标的任何建议?
git checkout myBranch
git tag temp
git reset --hard HEAD~2
git merge --no-commit master^
rm -rf *
git checkout temp^ -- .
git add .
git commit -m"new commit message for D"
git merge --no-commit master
rm -rf *
git checkout temp -- .
git add .
git commit -m"commit message for F"
答案 0 :(得分:2)
以下是我要做的详细程序:
import xml.etree.ElementTree as ET
# 1. Parse your xml file
tree = ET.parse('your.xml')
# 2. Get the root
root = tree.getroot()
# 3. Set the tag and attribute you are looking for
ns = 'urn:tva:metadata:2004'
matchTag = 'NicamWarningCS'
# 4. retrieve all Genres
genres = root.find('{%s}ProgramDescription' % ns) \
.find('{%s}ProgramInformationTable' % ns) \
.find('{%s}ProgramInformation' % ns) \
.find('{%s}BasicDescription' % ns) \
.findall('{%s}Genre' % ns)
# 5. filter them in order to get just the Names of the ones that match your matchTag : 'NicamWarningCS'
filteredGenreNames = [genre.find('{%s}Name' % ns) for genre in genres if matchTag in genre.get('href')]
# 6. extract the text of the tags
data = [t.text for t in filteredGenreNames]
print(data)
# ['Grof taalgebruik', 'Geweld']
答案 1 :(得分:1)
只需获取所有Genre
个元素,然后过滤那些您感兴趣的href
属性的元素:
ns = 'urn:tva:metadata:2004'
all_genres = fromstring(xml) \
.find('{%s}ProgramDescription' % ns) \
.find('{%s}ProgramInformationTable' % ns) \
.find('{%s}ProgramInformation' % ns) \
.find('{%s}BasicDescription' % ns) \
.findall('{%s}Genre' % ns)
some_genres = [g for g in all_genres if 'NicamWarningCS' in g.get('href')]
答案 2 :(得分:0)
我无法快速启动并运行Erik的答案,但它向我暗示了一个能够解决我问题的不同解决方案。
通过创建包含所有类型的dict,我能够过滤掉所有Nicam警告并将它们添加到一个列表中,然后我可以用它来填充我的SQL语句:
.open
它可能不是最好的解决方案,但现在这样做。