编辑:该项目是一个旧项目,下面的代码是一个处理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。
答案 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
。
更新
我无法在整个BCL中找到任何ParseXml
。
Update2
XmlReader
类是抽象的,因此不能像在代码中声明的那样使用
我们必须得出结论(也因为System.Xml
命名空间未导入到您的文件中...)您的代码中xmlReader
变量的类型可能在Utilities
命名空间中的某处声明,没有人能猜出你(或其他任何人)如何编码它。
作为旁注,当使用XmlReader
或任何其他实现IDisposable
接口的类型时,您必须处理它(view link)。