XmlReader.Parse()做什么?

时间:2011-04-12 10:43:51

标签: 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 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没有找到任何东西,搜索谷歌让我有很多xmlTextReaders。

5 个答案:

答案 0 :(得分:2)

编辑:查看代码之后看起来像XmlReader是一个自定义类(假设没有System.Xml的using语句存在),它很可能包含在XDocument中,如下所述

它可能被错误命名,我知道唯一适用于Xml的Parse方法是System.Xml.Linq命名空间中的所有XmlElements。即

XDocument.Parse(xmlString);

这将解析xml,它会检查它是否是一个有效的xmlDocument,如果是,它会将它作为XDocument(或任何元素)加载

答案 1 :(得分:2)

此处的XMLReader类型似乎来自 Utilities 库,而不是 .NET XMLReader类型。

答案 2 :(得分:2)

您使用的XmlReader类是自定义类,很可能是Utilities.XmlReader。我们不能对此发表任何意见,因为它是由您或同事撰写的课程。

答案 3 :(得分:2)

我猜ParseXml是XmlReader的扩展方法,如果MSDN / F1帮助没有提供有关方法定义的任何信息?或者,可能是代码的作者从XmlReader中继承并添加了此方法。

答案 4 :(得分:1)

XmlReader类没有Parse方法。 检查代码中声明的xmlReader变量的运行时类型是什么,然后重新检查msdn。

或者你的意思是XDocument.Parse

OP编辑后

更新 我无法在整个BCL中找到任何ParseXml

OP编辑后

Update2 XmlReader类是抽象的,因此不能像在代码中声明的那样使用 我们必须得出结论(也因为System.Xml命名空间未导入到您的文件中...)您的代码中xmlReader变量的类型可能在Utilities命名空间中的某处声明,没有人能猜出你(或其他任何人)如何编码它。

作为旁注,当使用XmlReader或任何其他实现IDisposable接口的类型时,您必须处理它(view link)。