具有多种属性的XML使用python

时间:2018-11-16 03:46:22

标签: python xml csv

我正在尝试将xml文件解析为csv,但运气不佳。这是我第一次学习Python。

这是xml结构的示例:

<!-- /StationName/BACnetTemp/MNB_1_HX/HiPressureAlarm -->
<node name="HiPressureAlarm" class="tridium.control.BinaryInputNode" module="coreRuntime" release="2.301.535.v1">
  <properties>
    <position><x>576</x><y>866</y></position>
    <timeDelay>
      <duration>60</duration>
    </timeDelay>
    <eventEnable>
      <toOffnormal>true</toOffnormal>
      <toFault>false</toFault>
      <toNormal>true</toNormal>
    </eventEnable>
    <alarmText>MCD Basement Re-Heat High Pressure Alarm</alarmText>
    <changeOfStateTime>2018-05-07T08:55:04.09-4</changeOfStateTime>
    <changeOfStateCount>848</changeOfStateCount>
    <elapsedActiveTime>
      <duration>126872</duration>
    </elapsedActiveTime>
    <activeInactiveText>
      <active>Alarm</active>
      <inactive>Normal</inactive>
    </activeInactiveText>
    <alarmValueEnabled>true</alarmValueEnabled>
  </properties>
</node>  <!-- HiPressureAlarm -->

某些属性将不适用于所有节点,我希望这些属性为空白单元格。

这是我的代码的开头。我可以用它写CSV的标题行,但无法弄清楚如何很好地浏览xml。

import xml.etree.ElementTree as ET
import csv

tree = ET.parse("station.xml")
root = tree.getroot()

# open a file for writing

data = open('Alm_Log.csv', 'w')

# create the csv writer object

csvwriter = csv.writer(data)

csvwriter.writerow(["pointName", "pointPath", "timeDelay", "toOffnormal", "toFault", "toNormal", "alarmText", "highLimit", "lowLimit", "deadband", "lowLimitEnabled", "highLimitEnabled"])

pointName来自节点属性“名称”

pointPath来自节点前的注释

timeDelay必须是timeDelay下的duration属性

toOffnormal,toFault和toNormal都来自eventEnable属性

其余的值来自同名的属性(大小写和全部),再说一次,如果该节点不存在它们,我希望它们是空白单元格。

TYIA为您提供帮助。您可以提供任何有助于我理解的解释,也将不胜感激。

谢谢!

0 个答案:

没有答案