首页 > 解决方案 > Python 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]

到目前为止,我只从 dynamo 获取列表并尝试将它们带入循环以创建 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]

标签: pythonxmlironpythonelementtree

解决方案


推荐阅读