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

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

0 голосов
/ 12 апреля 2011

edit: проект старый, и приведенный ниже код представляет собой один класс, который обрабатывает 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 types\r\n" + e.ToString() + "\r\n" + e.StackTrace + "\r\n");
            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 list\r\n" + e.ToString() + "\r\n" + e.StackTrace + "\r\n");
            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 && ftpUserName!=null && ftpPassWord!=null && 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 file\r\n" + e.ToString() + "\r\n" + e.StackTrace + "\r\n");
            return(false);
        }
        return(true);
    }
    protected bool FtpFile(){
        try{
            FtpMethods.UploadFile(ftpServer,ftpUserName,ftpPassWord,outputFile,ftpDestination);
        }catch(Exception e){
            HandleError("Error FTPing file\r\n" + e.ToString() + "\r\n" + e.StackTrace + "\r\n");
            return(false);
        }
        return(true);
    }

    #endregion
}

}

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

Ответы [ 5 ]

2 голосов
/ 12 апреля 2011

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

2 голосов
/ 12 апреля 2011

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

2 голосов
/ 12 апреля 2011

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

Может иметь неправильное имя, единственный известный мне метод Parse, работающий с Xml, - это все элементы XmlElements в пространстве имен System.Xml.Linq.Т.е.

XDocument.Parse(xmlString);

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

2 голосов
/ 12 апреля 2011

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

1 голос
/ 12 апреля 2011

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

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

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

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

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

...