我正在尝试xml
使用如下ElementTree
形式解析文件:
<Game>
<Event timestamp="2016-08-14T14:23:33.634" id="1713385925"
version="1471181110290" last_modified="2016-08-14T14:25:11" y="11.0"
x="89.7" outcome="0" team_id="148" player_id="51327" sec="8" min="23"
period_id="1" type_id="4" event_id="205">
<Q id="733814222" qualifier_id="265"/>
<Q id="481660420" qualifier_id="286"/>
<Q id="813378778" qualifier_id="152"/>
<Q id="570443899" qualifier_id="56" value="Right"/>
<Q id="420312891" qualifier_id="233" value="248"/>
<Q id="1186861264" qualifier_id="13"/>
</Event>
<Event timestamp="2016-08-14T14:23:33.634" id="1635888622"
version="1471181110289" last_modified="2016-08-14T14:25:11" y="89.0"
x="10.3" outcome="1" team_id="143" player_id="169007" sec="8" min="23"
period_id="1" type_id="4" event_id="248">
<Q id="1871787686" qualifier_id="56" value="Back"/>
<Q id="176295814" qualifier_id="13"/>
<Q id="69346842" qualifier_id="233" value="205"/>
<Q id="1588029344" qualifier_id="265"/>
<Q id="559785299" qualifier_id="285"/>
<Q id="380723313" qualifier_id="152"/>
</Event>
</Game>
我正在使用的代码很简单,并且可以按预期工作。但是,当我尝试向if condition
代码中添加时,一切都会改变
import xml.etree.ElementTree as ET
root = ET.parse(r'C:\Users\ADMIN\Desktop\Abhishek\PSG - Copy\Sample.xml').getroot()
Games = root.getchildren()
for Game in Games:
Events = Game.getchildren()
for Event in Events:
type_id = Event.attrib["type_id"]
team_id = Event.attrib["team_id"]
Qualifiers = Event.getchildren()
for Qualifier in Qualifiers:
id_ = Qualifier.attrib['id']
if id_ == 142:
print ("val")
这是它产生的错误:
Warning (from warnings module):
File "C:\Users\ADMIN\AppData\Local\Programs\Python\Python37\PSGPossessionSequences.py", line 9
Games = root.getchildren()
DeprecationWarning: This method will be removed in future versions. Use 'list(elem)' or iteration over elem instead.
Warning (from warnings module):
File "C:\Users\ADMIN\AppData\Local\Programs\Python\Python37\PSGPossessionSequences.py", line 11
Events = Game.getchildren()
DeprecationWarning: This method will be removed in future versions. Use 'list(elem)' or iteration over elem instead.
Warning (from warnings module):
File "C:\Users\ADMIN\AppData\Local\Programs\Python\Python37\PSGPossessionSequences.py", line 15
Qualifiers = Event.getchildren()
DeprecationWarning: This method will be removed in future versions. Use 'list(elem)' or iteration over elem instead.
我试着删除,if statement
并且效果很好。但是,我确实需要设置一个条件来调用所有id_
具有确定值的。我尝试使用"142"
以及,142
但问题仍然存在。为什么会这样呢?
您看到的错误不是错误,而是警告。您可以不使用它们而忽略它们,或者使它们静默或修复代码.get_children()
。您可以直接在每个XML元素上进行迭代:
root = ET.parse(r'C:\Users\ADMIN\Desktop\Abhishek\PSG - Copy\Sample.xml').getroot()
for Game in root:
for Event in Game:
# ...
for Qualifier in Event:
该if
测试不起作用,因为XML属性是字符串,文本而不是整数值。测试字符串:
if id_ == "142":
print("val")
您可能要使用XPath查询,而不是遍历所有内容。但是,Python随附的基本ElementTree实现受到一些限制。如果安装了lxml
库,您将获得更强大的实现,它对XPath的支持要优越得多:
from lxml import etree as ET
document = ET.parse(r'C:\Users\ADMIN\Desktop\Abhishek\PSG - Copy\Sample.xml')
root = document.getroot()
qualifier = root.xpath(".//Event/Q[@id='142']")[0]
event = qualifier.getparent()
type_id = event.attrib["type_id"]
team_id = event.attrib["team_id"]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句