我有一个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循环吗?我试过了,我得到一个错误“'元素'对象不可迭代”。
答案 0 :(得分:2)
我不知道您使用的是哪个库,但您可以使用以下代码获取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)
推荐阅读: