Python-使用minidom在XML中嵌套变量时遇到问题

Python-使用minidom在XML中嵌套变量时遇到问题,python,xml,parsing,minidom,Python,Xml,Parsing,Minidom,我使用Python minidom解析XML文件,并将输出打印为csv文件: 0.0,0.0,51.3,46.6, 49.9,49.0,51.0,46.6, 36.0,24.0,47.8,42.2, 51.0,46.6,49.3,34.1, 相反,程序生成以下内容,跳过“Q”标记,除非它们是各自“事件”标记中的最后一个标记。。。为什么我的程序无法打印这些 0.0,0.0,,46.6 49.9,49.0,, 36.0,24.0,42.2, 51.0,46.6,, 以下是XML源文件: <

我使用Python minidom解析XML文件,并将输出打印为csv文件:

0.0,0.0,51.3,46.6,
49.9,49.0,51.0,46.6,
36.0,24.0,47.8,42.2,
51.0,46.6,49.3,34.1,
相反,程序生成以下内容,跳过“Q”标记,除非它们是各自“事件”标记中的最后一个标记。。。为什么我的程序无法打印这些

0.0,0.0,,46.6
49.9,49.0,,
36.0,24.0,42.2,
51.0,46.6,,
以下是XML源文件:

<?xml version="1.0" encoding="UTF-8"?>
<Games id = "1">
  <Game id="1" competition_id="1">
    <Event id="0" x="0.0" y="0.0">
      <Q id="a" end_x="51.3" />
      <Q id="b" end_y="46.6" />
    </Event>
    <Event id="1" x="49.9" y="49.0">
      <Q id="a" end_x="51.0" />
      <Q id="b" end_y="46.6" />
      <Q id="c" q1="tap" />
    </Event>
    <Event id="2" x="0.0" y="0.0">
      <Q id="a" end_y="47.8" />
      <Q id="b" end_x="42.2" />
    </Event>
    <Event id="3" x="51.0" y="46.6">
      <Q id="a" end_y="49.3" />
      <Q id="b" end_x="34.1" />
      <Q id="c" q1="17.8" />
    </Event>
</Game>

如果查看限定符循环中for限定符的结构,那么循环中的end_x和end_y不会发生任何变化。这意味着代码将运行并重新分配end_x和end_y的值。在循环的末尾,end_x和end_y是最后一个限定符的值

from xml.dom.minidom import parse
import xml.dom.minidom

DOMTree = parse('myfile.xml');
collection = DOMTree.documentElement;

# Get all events in the collection
events = collection.getElementsByTagName("Event")

# Iterate through events
for event in events:
    start_x = event.getAttribute('x');
    start_y = event.getAttribute('y');

    qualifiers = event.getElementsByTagName('Q');

    # Iterate through qualifiers

    for qualifier in qualifiers:
        if(qualifier.hasAttribute('end_x')):
            end_x= qualifier.getAttribute('end_x');
        elif(qualifier.hasAttribute('end_y')):
            end_y= qualifier.getAttribute('end_y');

    print start_x + ',' + start_y + ',' + end_x + ',' + end_y
上面的代码应该满足您的要求。我注意到的一点是,最初的顺序是end_x然后end_y,然后顺序改变了end_y end_x,因此在示例正确格式中,端点坐标被翻转。所以输出是

0.0,0.0,51.3,46.6,
49.9,49.0,51.0,46.6,
36.0,24.0,42.2,47.8,
51.0,46.6,34.1,49.3,
希望这有帮助

0.0,0.0,51.3,46.6,
49.9,49.0,51.0,46.6,
36.0,24.0,42.2,47.8,
51.0,46.6,34.1,49.3,