【问题标题】:IronPython XML-Reader in .Net 2.0.Net 2.0 中的 IronPython XML-Reader
【发布时间】:2013-02-26 23:36:57
【问题描述】:

我创建了一个 XML-Reader,它创建了一个非常愚蠢的格式化列表,但要使用它的脚本需要这种方式。

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 等只是获取数据的程序特定功能。 我真的不明白为什么第一个脚本不起作用,我猜是因为 NET 2.0。

更新:在查看了 expat 是什么之后,我更加困惑了,因为我从来没有在任何地方使用过它,而且我使用的所有 elementtree 函数都应该在这个版本的 Iron Python 中得到支持。它仍然给我这一行的外籍人士错误tree = ET.parse(PATH_IN)

更新:我尝试使用 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:

【问题讨论】:

  • 默认情况下expatElementTree 用来解析xml。您的其他脚本是 writing xml 而不是 parsing 它,所以没有问题。但是,您收到此错误仍然很奇怪。也许您的 IronPython 安装已损坏?尝试使用another treebuilder,甚至使用 .NET XML 解析器查找/制作自己的树生成器。
  • 我的 Iron python 字典中没有 elementtree 文件夹,还有其他不使用 expat 的 xml 阅读器吗?

标签: python xml ironpython


【解决方案1】:

这里的基本问题是 ElementTree 使用 expat 进行 xml 解析,但无法从 IronPython 使用 expat(通过 CPython 包装器提供给 Python 的 C 库)。

但是,ElementTree 可以使用由不同解析器驱动的不同树构建器,例如.NET 中的 XMLReader 解析器。搜索“xmlreader treebuilder”会产生this result,这似乎既描述了您的问题并且提供了使用 XMLReader 的替代 treebuilder 实现(MIT 许可证)。

【讨论】:

  • 我已经找到了这个github.com/ixc/elementtree。我必须在工作中使用的 IronPython 实现中似乎缺少这个库。我可以使用 SimpleXMLTreeBuilder。如果没有您的帮助,我仍然无法解决这个问题,非常感谢您
  • 哦,expat 在最新的 Iron Python 版本中工作,似乎他们只是在 2.6 上遇到了问题ironpython.codeplex.com/workitem/31579
猜你喜欢
  • 2010-10-29
  • 2012-05-09
  • 1970-01-01
  • 2015-10-23
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
相关资源
最近更新 更多