Python ElementTree问题

时间:2018-08-31 16:01:11

标签: python xml ironpython elementtree

对不起,如果我在这个问题上错了。。我希望没有像这样的问题。同时也很抱歉,如果我在这个论坛中违反了任何规则,这是我的第一个帖子和问题。谢谢你的回答

我正在Revit Dynamo中使用python创建XML文件。 我使用ironPython 2.7并加载etree库。

import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
import sys
sys.path.append("C:\Program Files (x86)\IronPython 2.7\Lib")
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import ElementTree
import xml.etree.ElementTree as ET # Python 2.5
#INPUT
dataEnteringNode = IN
pfad=IN[0]
datei_name=IN[1]
sd_ifc_link=str(IN[2])
sd_liste=IN[3]
sd_pkt_liste=IN[4]

直到这一点,我只从发电机中获取列表,并试图将它们放入循环中以创建XML文件。奇怪的是,代码不时地工作。听起来很奇怪,但是前一天(没有任何更改,我也有XML文件),但是更新的XML不起作用。

我的脚本本身没有任何错误。它告诉我XML创建已经完成。当我尝试打开XML文件时,我无法获得正确的结构,导致到目前为止尚未编译完。手动编辑并保存即可。

我的问题是:

  1. 我创建XML文件的循环方式有什么问题
  2. 在创建XML的情况下,我还需要进一步了解etree吗?为什么它如此“零星地”工作?

我需要说的一件事: 我可以在浏览器中打开正确的XML,然后看到正常的结构, 但是,例如,当我尝试在notepad ++中打开它时,它只有1条单行。有迹象表明有什么限制吗?

这是XML创建工作正常的时候,或者如果我只是修复损坏的部分 XML-File.png

sd = ET.Element("SD_Fachmodell")
ET.SubElement(sd, "TGA", name="SD").text = sd_ifc_link
sd_ifc_name = ET.SubElement(sd,"SD-Elemente")
ET.SubElement(sd_ifc_name,"Anzahl").text= str(len(sd_liste))+ " Durchbrüche"

lauf = 0
for sd_i in sd_liste:
sd_id= ET.SubElement(sd_ifc_name, str(sd_i[0]))
sd_pkte=ET.SubElement(sd_id, "Lage")
ET.SubElement(sd_pkte, "XP").text = str(sd_pkt_liste[1][lauf])
ET.SubElement(sd_pkte, "YP").text = str(sd_pkt_liste[2][lauf])
ET.SubElement(sd_pkte, "ZP").text = str(sd_pkt_liste[3][lauf])
ET.SubElement(sd_pkte, "WKS").text = str(sd_pkt_liste[0][lauf])
sd_val = ET.SubElement(sd_id,"Parameter")
ET.SubElement(sd_val, "Form").text= str(sd_i[1])
ET.SubElement(sd_val, "Art").text= str(sd_i[2])
if (sd_i[3]!=""):
    ET.SubElement(sd_val, "Gewerk").text= str(sd_i[3])
ET.SubElement(sd_val, "Ebene").text= str(sd_i[4])
if (sd_i[5]!=""):
    ET.SubElement(sd_val, "Breite").text= str(sd_i[5])
if (sd_i[6]!=""):
    ET.SubElement(sd_val, "Höhe").text= str(sd_i[6])
ET.SubElement(sd_val, "Tiefe").text= str(sd_i[7])
if (sd_i[8]!=""):
    ET.SubElement(sd_val, "Durchmesser").text= str(sd_i[8])
ET.SubElement(sd_val, "Status_Neu").text= str(sd_i[11])
ET.SubElement(sd_val, "Status_Geändert").text= str(sd_i[9])
if (sd_i[10]!=""):
    ET.SubElement(sd_val, "TGA_Kommentar").text= str(sd_i[10])
lauf=lauf + 1

#Build_XML_Tree
tree = ET.ElementTree(sd)
tree.write(open(pfad + '\\'+ datei_name + '.xml', "w"), encoding='UTF-8', xml_declaration=True, method='xml')
#OUTPUT
OUT = [pfad]

0 个答案:

没有答案