繁体   English   中英

在Python中解析XML:多个相同的属性

[英]Parsing XML in Python: Multiple same attributes

我有一个xml文件:

    <movie title="Enemy Behind">
       <type>War, Thriller</type>
       <type>WW2</type>
       <format>DVD</format>
       <year>2003</year>
       <rating>PG</rating>
       <stars>10</stars>
       <description>Talk about a US-Japan war</description>
   </movie>

我正在使用以下代码在Python中解析此XML:

     Print detail of each movie.
     for movie in movies:
        print ("*****Movie*****")
        if movie.hasAttribute("title"):
           print ("Title: %s" % movie.getAttribute("title"))

        type = movie.getElementsByTagName('type')[0]
        print ("Type: %s" % type.childNodes[0].data)
        format = movie.getElementsByTagName('format')[0]
        print ("Format: %s" % format.childNodes[0].data)
        rating = movie.getElementsByTagName('rating')[0]
        print ("Rating: %s" % rating.childNodes[0].data)
        description = movie.getElementsByTagName('description')[0]
        print ("Description: %s" % description.childNodes[0].data)

但是使用此代码只能打印其中一个属性,即“战争,惊悚”。 不会显示“ WW2”的另一个属性。

我应该使用for循环吗? 我已经尝试过,但收到错误消息“'Element'对象不可迭代”。

我不知道您使用的是哪个库,但是您可以使用以下代码获取XML代码段的值:

的test.xml

   <movie title="Enemy Behind">
       <type>War, Thriller</type>
       <type>WW2</type>
       <format>DVD</format>
       <year>2003</year>
       <rating>PG</rating>
       <stars>10</stars>
       <description>Talk about a US-Japan war</description>
   </movie>

test.py

import lxml.etree

# Getting the XML root tag... Movie in our case
root = lxml.etree.parse("test.xml").getroot()

# the method "get" returns the value of the XML attribute informed
# as parameter
print(root.get("title"))

# You can iterate over the children of an XML node
for child in root:
    print(child.text) # gets the text value from the children XML nodes

# Or more specifically, for each type, use the method FIND to get
# the XML child node from the current XML node.
node = root.find("name")
if node is not None:
    print(node.text)

# ..Or if you expect more than one node, as it is the case for the tag
# "type", you can use FINDALL which returns all direct children from the current XML node.
nodes = root.findall("type")
for node in nodes:
    print(node.text)

推荐阅读:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM