Мне нужен парсер MediaWiki в C #.(http://www.mediawiki.org/wiki/Alternative_parsers)Поскольку его не существует, и я действительно хочу парсер MediaWiki, а не какой-то другой, например WikiPlex, я искал возможность использовать некоторые из существующих парсеров на другом языке и смог успешно вызвать парсер киви для достижения этой цели.Однако проблема в том, что он не обрабатывает Unicode / UTF-8 правильно.
Теперь я хотел использовать этот скрипт:http://www.connellybarnes.com/code/python/mw2html
и использовать его через IronPython.
Я использую IronPython 2.7 здесь:http://ironpython.net/
Я загрузил двоичный zip-файл (не установщик).
Затем я использовал это руководство в качестве базы:http://www.codeproject.com/KB/cs/IronPythonMethod_CShap.aspx
И вот что я сделал:
using System;
using IronPython.Hosting;
namespace IronPythonMethodInvokationDemo
{
class Program
{
// /6578342/ssylka-na-import-sborok-python-pri-vyzove-iz-ironpython-v-c
static void Main(string[] args)
{
//Microsoft.Scripting.Hosting.ScriptEngine m_engine = Python.CreateEngine(DefaultEngineOptions());
Microsoft.Scripting.Hosting.ScriptEngine m_engine = Python.CreateEngine();
System.Collections.Generic.ICollection<string> paths = m_engine.GetSearchPaths();
paths.Add(@"D:\username\Documents\Visual Studio 2010\Projects\IronPython\IronPython-Bin-2.7\IronPython-2.7\Lib"); // modules path
paths.Add(@"D:\username\Documents\Visual Studio 2010\Projects\IronPython\IronPython-Bin-2.7\IronPython-2.7"); // ipy.exe path
m_engine.SetSearchPaths(paths);
//Step 1:
//Creating a new script runtime
//var ironPythonRuntime = Python.CreateRuntime();
var ironPythonRuntime = m_engine.Runtime;
try
{
//Step 2:
//Load the Iron Python file/script into the memory
//Should be resolve at runtime
//dynamic loadIPython = ironPythonRuntime.UseFile("first.py");
//ironPythonRuntime.GetBuiltinModule();
dynamic loadIPython = ironPythonRuntime.UseFile("mw3html.py");
//Step 3:
//Invoke the method and print the result
/*
Console.WriteLine(
string.Format("Addition result from IronPython method for {0} and {1} is {2}",
100,200, loadIPython.add(100, 200))
);
*/
Console.WriteLine( string.Format("Result for IronPython main method: {0}", loadIPython.main()) );
} // End Try
catch (System.IO.FileNotFoundException ex)
{
Console.WriteLine(ex.Message);
} // End Catch
Console.ReadKey(true);
} // End Sub Main
} // End Class Program
} // End Namespace IronPythonMethodInvokationDemo
Если я использую first.py, то все работает отлично.Теперь, используя mw2html.py, я получаю
KeyNotFoundException для ironPythonRuntime.UseFile ("mw3html.py");для ключа "" ...
Кто-нибудь знает, что это значит?