我創建了一個XML讀取器,它創建了一個非常笨的格式化List,但使用它的腳本需要這種方式。.Net 2.0中的IronPython XML讀取器
import xml.etree.ElementTree as ET
PATH_IN = "<Path>\sweep.xml"
tree = ET.parse(PATH_IN)
root = tree.getroot()
Input = []
for project in root:
for design in project:
list_lvl2 = []
list_lvl2.append(project.get('name'))
list_lvl2.append(design.get('name'))
list_lvl2.append('')
list_lvl3 = []
for param in design:
list_lvl4 = []
list_lvl4.append(param.get('name'))
list_lvl5 = []
for steps in param:
list_lvl5.append(steps.text)
list_lvl4.append(list_lvl5)
list_lvl4.append(param.get('unit'))
list_lvl3.append(list_lvl4)
list_lvl2.append(list_lvl3)
Input.append(list_lvl2)
問題是我在.NET上2.0.50727.5466使用IronPython的2.6.10920.0程序的腳本接口來執行它。而它拋出以下錯誤:
*Global - Messages
[error] ImportException: No module named expat; use SimpleXMLTreeBuilder instead In file "<Path>/sweep.py", line 36 ---- While executing script: <Path>/sweep.py
[error] Error executing script in <Path>\sweep.py:
[error] ImportException: No module named expat; use SimpleXMLTreeBuilder instead In file "<Path>/sweep.py", line 36 ---- While executing script: <Path>/sweep.py
[error] Error executing script in <Path>\sweep.py:
我不明白的是,這個腳本使用相同的模塊正常工作:
import xml.etree.ElementTree as ET
path = "<Path>\projects.xml"
root = ET.Element('xml')
projects = oDesktop.GetProjectList()
for i in projects:
project = ET.SubElement(root,'project')
project.set('name', i)
designs = oDesktop.SetActiveProject(i).GetTopDesignList()
for u in designs:
design = ET.SubElement(project,'design')
design.set('name', u)
vars = oDesktop.SetActiveProject(i).GetDesign(u).GetVariables()
for z in vars:
param = ET.SubElement(design,'param')
param.set('name', z)
value = ET.SubElement(param,'value')
value.text = oDesktop.SetActiveProject(i).GetDesign(u).GetVariableValue(z)
f = open(path, "w")
tree = ET.ElementTree(root)
tree.write(f)
f.close()
oDesktop和這樣是獲取數據只是programspecific功能。 我真的不明白爲什麼第一個腳本不能工作,我猜是因爲NET 2.0。
更新:查找expat後,我更加困惑,因爲我從不在任何地方使用它,所以我使用的所有elementtree函數都應該支持這個版本的Iron Python。不過它給我的外籍錯誤在這條線tree = ET.parse(PATH_IN)
UPDATE:我試着用from elementtree import SimpleXMLTreeBuilder as ET
這就造成:
*Global - Messages
[error] ImportException: No module named elementtree In file "<Path>/sweep.py", line 3 ---- While executing script: <Path>/sweep.py
[error] Error executing script in <Path>\sweep.py:
默認情況下,'ElementTree'使用'expat'來解析xml。你的其他腳本是*寫* XML不解析*,所以沒有問題。儘管如此,你仍然會遇到這個錯誤仍然很奇怪。也許你的IronPython安裝被破壞了?嘗試使用[另一個treebuilder](http://stackoverflow.com/a/2067177/1002469),甚至使用.NET XML解析器查找/製作自己的樹型構建器。 – 2013-02-26 12:49:47
我的鐵蟒字典中沒有elementtree文件夾還有沒有其他使用expat的xml讀者? – Yui 2013-02-26 14:59:23