Manual:XML Import file manipulation in CSharp/ru
From MediaWiki.org
Contents |
[edit] Краткий обзор
Эта страница показывает, как использовать схему MediaWiki с Visual Studio .NET C#, чтобы управлять MediaWiki файлом импорта XML в коде, используя объектно-ориентированное программирование вместо того, чтобы работать непосредственно с сырым XML.
Один случай использования это когда у Вас могли бы быть страницы в wiki-формате, который должены быть изменены. Один из способов это сделать - это экспортировать их в файл XML, затем изменить файл XML, и затем импортировать файл XML назад. Конечно, Вы должны убедиться, что пользователи не могут изменить эти файлы во время промежутка между экспортом и переимпортом. Для участков с умеренным использованием этот подход мог бы быть соответствующим.
[edit] Схемы
Тут показан в сокращенном виде файл импорта XML schemaLocation (полностью этот файл XML в http://www.mediawiki.org/xml/export-0.3.xsd):
<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.3/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.3/ http://www.mediawiki.org/xml/export-0.3.xsd" version="0.3" xml:lang="en"> <siteinfo>...</siteinfo> <page>...</page> <page>...</page> <page>...</page> </mediawiki>
Во-первых, загрузите MediaWiki схему из http://www.mediawiki.org/xml/export-0.3.xsd. Поместите файл схемы в папку проекта .NET, и переименуйте файл с названием более интуитивным, например, так MediaWikiExport.xsd. Используя инструмент Visual Studio - xsd.exe, Вы можете сгенерировать .NET файл класса, основанный на этой схеме, используя следующию командную строку VS.NET:
xsd c:/inetpub/wwwroot/MyProject/MediaWikiExport.xsd /c
Эта команда создаст файл класса по имени MediaWikiExport.cs.
[edit] Диаграмма классов
Автосгенерированный файл Класса будет похож на следующие:
[edit] Диаграмма Схемы
Схема будет похожа на следующие:
[edit] .NET Проект
После того, как Вы добавляете свой новый автосгенерированныйй файл класса, добавьте файл в свой проект .NET, вида console application project.
В этом образце кода Вы видите примеры того, как работать с файлом XML объектно-ориентированным способом вместо того, чтобы разбирать сырой XML. Этот образец кода ниже использовался для 1.13.2 версий Media Wiki.
using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Xml.Serialization; namespace WikiFileManipulation { class Program { static void Main(string[] args) { // name of the exported wiki file string file = "ExportedWikiPages.xml"; // instantiate MediaWikiType object MediaWikiType mw = new MediaWikiType(); // Open XML file containing exported wiki pages System.Xml.XmlDataDocument xml = new System.Xml.XmlDataDocument(); xml.Load(file); // Deserialize the XML file into the MediaWikiType object XmlSerializer serializer = new XmlSerializer(typeof(MediaWikiType)); System.Xml.XmlNodeReader oReader = new System.Xml.XmlNodeReader(xml); mw = (MediaWikiType)serializer.Deserialize(oReader); // Loop through all the Pages in the MediaWikiType object for (int i = 0; i < mw.page.Length; i++) { PageType p = mw.page[i]; foreach (Object o in p.Items) { // Examine the RevisionType if (o.GetType().Equals(typeof(RevisionType))) { // Cast to RevisionType object RevisionType r = (RevisionType)o; // if you increment "timestamp" by one minute, then you'll be able to re-import file r.timestamp = r.timestamp.AddMinutes(1); // Update the value of the "text" of the revision // this is the page text TextType text = (TextType)r.text; text.Value = text.Value.Replace("oldvalue", "newvalue"); } } } //serialize the updated object back to the original file with the corrections/additions System.IO.TextWriter writer = new System.IO.StreamWriter(file); serializer.Serialize(writer, mw); writer.Close(); } } }

