Что делает XmlReader.Что делает Parse()?

#c# #visual-studio-2005 #xmlreader

#c# #visual-studio-2005 #xmlreader

Вопрос:

редактировать: Проект является старым проектом, и приведенный ниже код представляет собой один класс, который обрабатывает xml.

Возникает вопрос, как получить xsd из старого устаревшего приложения, но, похоже, все, что оно делает, это: XmlReader.parseXML(fileName,outputFile); в методе ProcessXml().

 using System;
using System.IO;
using System.Configuration;
using Utilities;
namespace JobProcessor
{


public class XmlJob : Job
{
    #region variables
    private string      ftpServer;
    private string      ftpUserName;
    private string      ftpPassWord;
    private string      ftpDestination;
    ///<summary>The xml reader used to get validation information from the xmp parsing</summary>
    protected XmlReader xmlReader   = new XmlReader();

    private string      outputFile;


    public XmlJob(string fileName, string type) : base(fileName, type){
        ftpServer       = ConfigurationManager.AppSettings[type   "-ftp"];
        ftpUserName     = ConfigurationManager.AppSettings[type   "-ftpUser"];
        ftpPassWord     = ConfigurationManager.AppSettings[type   "-ftpPass"];
        ftpDestination  = ConfigurationManager.AppSettings[type   "-ftpDest"];
    }


    protected bool ConfigureXmlReader(){
        int    recType    = 0;

        try{
            //set up the record types (i.e. the elements that trigger a new record in the output
            while(ConfigurationManager.AppSettings[type   "-RecordType"   recType.ToString("00")] != null){
                xmlReader.AddRecordType(ConfigurationManager.AppSettings[type   "-RecordType"   recType.ToString("00")],recType.ToString("00"));
                recType  ;
            }
            //store the number of types
            xmlReader.SetNoRecordTypes(recType);
        }catch(Exception e){
            HandleError("Error loading record typesrn"   e.ToString()   "rn"   e.StackTrace   "rn");
            return(false);
        }

        try{
            //set up the fields which make up each record type
            for(int i=0;i<recType;i  ){
                xmlReader.AddFieldsList(i,ConfigurationManager.AppSettings[type   "-"   i.ToString("00")   "Fields"]);
            }
        }catch(Exception e){
            HandleError("Error loading field listrn"   e.ToString()   "rn"   e.StackTrace   "rn");
            return(false);
        }
        return(true);
    }

    public override void RunJob(){
        outputFile = Path.Combine(destinationDirectory, Path.GetFileNameWithoutExtension(fileName)   ".flat");

        if(!ConfigureXmlReader()){
            return;
        }

        if(!CheckInputFile()){
            return;
        }

        if(!ProcessXml()){
            return;
        }

        if(!Validate()){
            return;
        }

        if(ftpServer!=null amp;amp; ftpUserName!=null amp;amp; ftpPassWord!=null amp;amp; ftpDestination!=null){
            if(!FtpFile()){
                return;
            }
        }

        MoveOriginalFile();
    }


    protected virtual bool Validate(){
        return(true);
    }

    protected bool ProcessXml(){
        /*
         * Process the xml file into a delimited format
         */

        try{
            xmlReader.ParseXml(fileName,outputFile);
        }catch(Exception e){
            HandleError("Error parsing XML filern"   e.ToString()   "rn"   e.StackTrace   "rn");
            return(false);
        }
        return(true);
    }
    protected bool FtpFile(){
        try{
            FtpMethods.UploadFile(ftpServer,ftpUserName,ftpPassWord,outputFile,ftpDestination);
        }catch(Exception e){
            HandleError("Error FTPing filern"   e.ToString()   "rn"   e.StackTrace   "rn");
            return(false);
        }
        return(true);
    }

    #endregion
}
  

}

Что именно делает эта команда? F1 ничего не находит, и поиск в Google приводит меня к множеству xmlTextReaders.

Комментарии:

1. Каков тип экземпляра XmlReader здесь?

2. Показанный вами код не компилируется. XmlReader является абстрактным классом.

3. Опубликуйте свой реальный код, XmlReader он абстрактен и не может быть создан.

4. System.Xml.XmlReader является абстрактным, поэтому вы, должно быть, используете другой тип с тем же именем. Пожалуйста, не могли бы вы дать нам полное имя (т. Е. с пространствами имен) используемого вами XmlReader?

5. XmlReader вероятно, это не то, System.Xml.XmlReader что есть в .NET Framework. Проверьте, откуда это берется. Наугад предположу, что он принимает имя файла, открывает файл и преобразует содержимое в XML и, наконец, записывает результат XML в outputFile.

Ответ №1:

Похоже, что XMLReader тип здесь взят из библиотеки утилит, а не из XMLReader типа .NET.

Ответ №2:

Редактировать: После просмотра кода кажется, что XmlReader является пользовательским классом (учитывая, что никаких инструкций using для System.Xml существует), который, скорее всего, обтекает XDocument, как объяснено ниже

Возможно, у него неправильное имя, единственный известный мне метод синтаксического анализа, который работает с Xml, — это все XmlElements в пространстве имен System.Xml.Linq. Т.е.

 XDocument.Parse(xmlString);
  

Это проанализирует xml, проверит, является ли это допустимым XML-документом, и, если это так, загрузит его как XDocument (или любой другой элемент)

Ответ №3:

XmlReader Класс, который вы используете, является пользовательским классом, скорее всего, так оно и есть Utilities.XmlReader . Мы ничего не можем сказать об этом, потому что это класс, написанный вами или коллегой.

Ответ №4:

Я бы предположил, что parseXML был методом расширения XmlReader, если справка MSDN / F1 не дает никакой информации об определении метода? Или, возможно, автор кода сделал подкласс из XmlReader и добавил этот метод.

Ответ №5:

У XmlReader класса нет Parse метода. Проверьте, каков тип времени выполнения xmlReader переменной, объявленной в вашем коде, а затем перепроверьте msdn.

Или же вы имели в виду XDocument.Parse .

Обновить после редактирования OP
мне не удалось найти ни одного ParseXml во всем BCL.

Update2 после редактирования OP
XmlReader Класс является абстрактным и, следовательно, не может использоваться так, как объявлено в вашем коде.
Мы должны заключить (также потому, что System.Xml пространство имен не было импортировано в ваш файл …), что тип xmlReader переменной в вашем коде, вероятно, объявлен где-то в Utilities пространстве имен, никто не может догадаться, как вы (или кто-либо другой) его закодировали.

В качестве дополнительного примечания, при использовании XmlReader или любого другого типа, реализующего IDisposable интерфейс, вы должны позаботиться о его удалении (просмотреть ссылку).