首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按属性解析子元素(XML、Python)

按属性解析子元素(XML、Python)
EN

Stack Overflow用户
提问于 2020-10-25 09:42:08
回答 1查看 17关注 0票数 0

我在解析xml文件时遇到了麻烦,我想寻求一些帮助。

我想要的是基于locale="EN-US"SynopsisTitle解析一个子元素。

预期的结果将是:

(US)

  • Description文本
  • Vertigo

我可以访问for循环中的两个子元素,或者通过切片根元素.还将子元素存储在列表中,然后从列表中访问描述和标题。在第一次迭代之后,还中断了for循环,这对于Synopsis是有效的,但它还远远不够优雅。

如果有人能帮忙,我会非常感激的。

代码语言:javascript
复制
    <VODMetadata>
        <General assetID="XYZ" WarnerID="WarnerID12345" assetName="Vertigo" version="1" provider="Warner" providerID="www.warner.com" programmeType="Movie"/>
        <MovieInfo>
            <Movie id="1159775" name="Vertigo">
                <ProductionYear>1958</ProductionYear>
                <Studio>Warner</Studio>
                <Titles>
                    <Title locale="ES-AR" type="EPG">Vertigo(ESP)</Title>
                    <Title locale="EN-US" type="EPG">Vertigo (US)</Title>
                </Titles>
                <Synopses>
                    <Synopsis locale="EN-US">
                        <Short/>
                        <Medium/>
                        <Long>Description text english</Long>
                    </Synopsis>
                    <Synopsis locale="ES-AR">
                        <Short/>
                        <Medium/>
                        <Long>Description text spanish</Long>
                    </Synopsis>
                </Synopses>
                <Genres>
                    <Genre sequence="1">Drama</Genre>
                    <Genre sequence="2">Thriller</Genre>
                    <Genre sequence="3">Mystery</Genre>
                </Genres>
        </MovieInfo>
    </VODMetadata>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-25 10:12:00

下面

代码语言:javascript
复制
import xml.etree.ElementTree as ET

xml = ''' <VODMetadata>
        <General assetID="XYZ" WarnerID="WarnerID12345" assetName="Vertigo" version="1" provider="Warner" providerID="www.warner.com" programmeType="Movie"/>
        <MovieInfo>
            <Movie id="1159775" name="Vertigo">
                <ProductionYear>1958</ProductionYear>
                <Studio>Warner</Studio>
                <Titles>
                    <Title locale="ES-AR" type="EPG">Vertigo(ESP)</Title>
                    <Title locale="EN-US" type="EPG">Vertigo (US)</Title>
                </Titles>
                <Synopses>
                    <Synopsis locale="EN-US">
                        <Short/>
                        <Medium/>
                        <Long>Description text english</Long>
                    </Synopsis>
                    <Synopsis locale="ES-AR">
                        <Short/>
                        <Medium/>
                        <Long>Description text spanish</Long>
                    </Synopsis>
                </Synopses>
                <Genres>
                    <Genre sequence="1">Drama</Genre>
                    <Genre sequence="2">Thriller</Genre>
                    <Genre sequence="3">Mystery</Genre>
                </Genres>
            </Movie>
        </MovieInfo>
    </VODMetadata>'''
root = ET.fromstring(xml)
print(root.find('.//Title[@locale="EN-US"]').text)
print(root.find('.//Synopsis[@locale="EN-US"]').find('Long').text)

输出

代码语言:javascript
复制
Vertigo (US)
Description text english
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64522285

复制
相关文章

相似问题

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