0

私はかなりばかげたフォーマットのリストを作成する 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:
4

1 に答える 1

1

ここでの基本的な問題は、ElementTree が xml 解析に expat を使用することですが、expat (CPython ラッパーを介して Python で使用できるようになった C ライブラリ) は IronPython から使用できないことです。

ただし、ElementTree は、.NET の XMLReader パーサーなど、別のパーサーによって駆動される別のツリー ビルダーを使用できます。「xmlreader treebuilder」を検索すると、この結果が得られます。これは、問題説明し、 XMLReader を使用する別のツリービルダー実装 (MIT ライセンス) を提供しているようです。

于 2013-02-26T15:36:57.273 に答える