У меня есть реализованный скрипт на python, который изменяет локальный XML-файл, получая значения из другого локального XML-файла, используя ElementTree
.Мне нужно реализовать графический интерфейс для всего этого.Итак, я выбрал Visual C #> Рабочий стол Windows> Приложение Windows Forms .Здесь я мог бы сделать простой графический интерфейс, где код вызывает скрипт Python с использованием IronPython.Похоже, что IronPython не поддерживает ElementTree
.Вот где проблема.
Использование Visual Studio Community 2017. Итак, добавлена разработка Python при установке.Также в ссылках на проект добавлен IronPython с помощью «Управление пакетами Nuget».Но не смог добавить туда python, так как он сказал
"Не удалось установить пакет 'python 3.7.2'. Вы пытаетесь установить этот пакет в проект, нацеленный на .NETFramework, Version = v4.6.1 ', но пакет не содержит никаких ссылок на сборки или файлов содержимого, совместимых с этой платформой. Для получения дополнительной информации свяжитесь с автором пакета. "
Независимо от этого, выполнялся код Pythonсоздавая движокНо когда был запущен скрипт python, который использовал elementtree, я получил ошибку
«Исключение:« IronPython.Runtime.Exceptions.ImportException »в Microsoft.Dynamic.dll Нет модуля с именем xml.etree.ElementTree ".
Хотя код работает отлично, при запуске напрямую из оболочки Python.После этого я погуглил и нашел способ:
paths.Add(@"C:\Users\suddin\AppData\Local\Programs\Python\Python37-32\Lib");
engine.SetSearchPaths(paths);
Но теперь новая ошибка:
"Возникло исключение:" Microsoft.Scripting.SyntaxErrorException "в Microsoft.Dynamic.dll неожиданный токен 'из' "
FullInstallation.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using IronPython.Hosting;
namespace Installer
{
public partial class FullInstallation : Form
{
public FullInstallation()
{
InitializeComponent();
}
private void Install_Click(object sender, EventArgs e)
{
var engine = Python.CreateEngine();
var paths = engine.GetSearchPaths();
paths.Add(@"C:\Users\suddin\AppData\Local\Programs\Python\Python37-32\Lib");
engine.SetSearchPaths(paths);
try
{
engine.ExecuteFile("I:\\Python\\XML Parser\\BW_Config_ConfigureCode.py");
}
catch(Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
}
}
}
Python-скрипт:
import xml.etree.ElementTree as ET
# Welcome! In this file, we configure all the tags of BW_Config.xml, which are there in the file BW_Config_Installer_Configurations.xml
# We parse 2 xml files in this code.
# First is the BW_Config.xml which we need to configure
# Second is the BW_Config_Installer_Configurtion.xml which contains the information about which tags are to be configured in the BW_Config.xml
BW_Config_tree = ET.parse('BW_Config_for_parsing_practice.xml') # parsed BW_Config.xml
BW_Config_root = BW_Config_tree.getroot()
# parsed BW_Config_Installer_Configurations.xml
installer_config_tree =ET.parse('BW_Config_Installer_Configurations.xml')
installer_config_root = installer_config_tree.getroot()
i = 0
# This loop will traverse all the tags which need to be cofigured, one by one
for configurable_tag in installer_config_root.findall("./BW_Config/"):
# This variable will contain the name of the tag to be configured in each iteration
configurable_tagname = configurable_tag.tag
# This variable will contain the path of the tag inside BW_Config.xml, in each iteration
configurable_tagpath = configurable_tag.attrib["xpath"]
# This variable will contain the data about what is to be configure in the tag, in each iteration
configurable_tagattribute = configurable_tag.attrib["property"]
# This variable will be set to "yes", if the respective tag is to be changed, else "no"
configurable_tagchoice = configurable_tag.attrib["configurable"]
# This variable will contain the new value for the respective tag
configurable_tagnewvalue = configurable_tag.attrib["value"]
i = i + 1 # It is used just to maintain the number of iterations and for user friendly console display
# Printing which tag we will be dealing with in this iteration
print(i, configurable_tagname)
print("\n")
....
Как использовать Python (с elementTree), который вызывается из C #?Или есть другой способ, кроме IronPython или чего-то еще?