操作xml

4 篇文章 0 订阅
 //---------------------------------------------------------------------------------------------------
//XmlReader类用于Xml文件的一般读取操作,以下对这个类做简单介绍:
//
//Attributes(属性):
//listBox: 设置该属性主要为了得到客户端控件以便于显示所读到的文件的内容(这里是ListBox控件)
//xmlPath: 设置该属性为了得到一个确定的Xml文件的绝对路径
//
//Basilic Using(重要的引用):
//System.Xml: 该命名空间中封装有对Xml进行操作的常用类,本类中使用了其中的XmlTextReader类
//XmlTextReader: 该类提供对Xml文件进行读取的功能,它可以验证文档是否格式良好,如果不是格式 // 良好的Xml文档,该类在读取过程中将会抛出XmlException异常,可使用该类提供的
// 一些方法对文档节点进行读取,筛选等操作以及得到节点的名称和值
//
//bool XmlTextReader.Read(): 读取流中下一个节点,当读完最后一个节点再次调用该方法该方法返回false
//XmlNodeType XmlTextReader.NodeType: 该属性返回当前节点的类型
// XmlNodeType.Element 元素节点
// XmlNodeType.EndElement 结尾元素节点
// XmlNodeType.XmlDeclaration 文档的第一个节点
// XmlNodeType.Text 文本节点
//bool XmlTextReader.HasAttributes: 当前节点有没有属性,返回true或false
//string XmlTextReader.Name: 返回当前节点的名称
//string XmlTextReader.Value: 返回当前节点的值
//string XmlTextReader.LocalName: 返回当前节点的本地名称
//string XmlTextReader.NamespaceURI: 返回当前节点的命名空间URI
//string XmlTextReader.Prefix: 返回当前节点的前缀
//bool XmlTextReader.MoveToNextAttribute(): 移动到当前节点的下一个属性
//---------------------------------------------------------------------------------------------------

namespace XMLReading
{
 using System;
 using System.Xml;
 using System.Windows.Forms;
 using System.ComponentModel;

 /// <summary>
 /// Xml文件读取器
 /// </summary>

 public class XmlReader : IDisposable
 {
  private string _xmlPath;
  private const string _errMsg = "Error Occurred While Reading ";
  private ListBox _listBox;
  private XmlTextReader xmlTxtRd;

  #region XmlReader 的构造器

  public XmlReader()
  {
   this._xmlPath = string.Empty;
   this._listBox = null;
   this.xmlTxtRd = null;
  }

  /// <summary>
  /// 构造器
  /// </summary>
  /// <param name="_xmlPath">xml文件绝对路径</param>
  /// <param name="_listBox">列表框用于显示xml</param>

  public XmlReader(string _xmlPath, ListBox _listBox)
  {
   this._xmlPath = _xmlPath;
   this._listBox = _listBox;
   this.xmlTxtRd = null;
  }

  #endregion
  #region XmlReader 的资源释放方法

  /// <summary>
  /// 清理该对象所有正在使用的资源

  /// </summary>

  public void Dispose()
  {
   this.Dispose(true);
   GC.SuppressFinalize(this);
  }

  /// <summary>
  /// 释放该对象的实例变量
  /// </summary>
  /// <param name="disposing"></param>

  protected virtual void Dispose(bool disposing)
  {
   if (!disposing)
    return;
   if (this.xmlTxtRd != null)
   {
    this.xmlTxtRd.Close();
    this.xmlTxtRd = null;
   }

   if (this._xmlPath != null)
   {
    this._xmlPath = null;
   }
  }

  #endregion 
  #region XmlReader 的属性

  /// <summary>
  /// 获取或设置列表框用于显示xml
  /// </summary>

  public ListBox listBox
  {
   get
   {
    return this._listBox;
   }
   set
   {
    this._listBox = value;
   }
  }

  /// <summary>
  /// 获取或设置xml文件的绝对路径
  /// </summary>

  public string xmlPath
  {
   get
   {
    return this._xmlPath;
   }
   set
   {
    this._xmlPath = value;
   }
  }

  #endregion

  /// <summary>
  /// 遍历Xml文件
  /// </summary>

  public void EachXml()
  {
   this._listBox.Items.Clear();
   this.xmlTxtRd = new XmlTextReader(this._xmlPath);

   try
   {
    while(xmlTxtRd.Read())
    {
     this._listBox.Items.Add(this.xmlTxtRd.Value);
    }
   }
   catch(XmlException exp)
   {
    throw new XmlException(_errMsg + this._xmlPath + exp.ToString());
   }
   finally
   {
    if (this.xmlTxtRd != null)
     this.xmlTxtRd.Close();
   }
  }

  /// <summary>
  /// 读取Xml文件的节点类型
  /// </summary>

  public void ReadXmlByNodeType()
  {
   this._listBox.Items.Clear();
   this.xmlTxtRd = new XmlTextReader(this._xmlPath);

   try
   {
    while(xmlTxtRd.Read())
    {
     this._listBox.Items.Add(this.xmlTxtRd.NodeType.ToString());
    }
   }
   catch(XmlException exp)
   {
    throw new XmlException(_errMsg + this._xmlPath + exp.ToString());
   }
   finally
   {
    if (this.xmlTxtRd != null)
     this.xmlTxtRd.Close();
   }
  }

  /// <summary>
  /// 根据节点类型过滤Xml文档
  /// </summary>
  /// <param name="xmlNType">XmlNodeType 节点类型的数组</param>

  public void FilterByNodeType(XmlNodeType[] xmlNType)
  {
   this._listBox.Items.Clear();
   this.xmlTxtRd = new XmlTextReader(this._xmlPath);
   try
   {
    while(xmlTxtRd.Read())
    {
     for (int i = 0; i < xmlNType.Length; i++)
     {
      if (xmlTxtRd.NodeType == xmlNType[i])
      {
       this._listBox.Items.Add(xmlTxtRd.Name + " is Type " + xmlTxtRd.NodeType.ToString());
      }
     }
    }
   }
   catch(XmlException exp)
   {
    throw new XmlException(_errMsg + this.xmlPath + exp.ToString());
   }
   finally
   {
    if (this.xmlTxtRd != null)
     this.xmlTxtRd.Close();
   }
  }

  /// <summary>
  /// 读取Xml文件的所有文本节点值

  /// </summary>

  public void ReadXmlTextValue()
  {
   this._listBox.Items.Clear();
   this.xmlTxtRd = new XmlTextReader(this._xmlPath);

   try
   {
    while(xmlTxtRd.Read())
    {
     if (xmlTxtRd.NodeType == XmlNodeType.Text)
     {
      this._listBox.Items.Add(xmlTxtRd.Value);
     }
    }
   }
   catch(XmlException xmlExp)
   {
    throw new XmlException(_errMsg + this._xmlPath + xmlExp.ToString());
   }
   finally
   {
    if (this.xmlTxtRd != null)
     this.xmlTxtRd.Close();
   }
  }

  /// <summary>
  /// 读取Xml文件的属性
  /// </summary>

  public void ReadXmlAttributes()
  {
   this._listBox.Items.Clear();
   this.xmlTxtRd = new XmlTextReader(this._xmlPath);

   try
   {
    while(xmlTxtRd.Read())
    {
     if (xmlTxtRd.NodeType == XmlNodeType.Element)
     {
      if (xmlTxtRd.HasAttributes)
      {
       this._listBox.Items.Add("The Element " + xmlTxtRd.Name + " has " + xmlTxtRd.AttributeCount + " Attributes");

       this._listBox.Items.Add("The Attributes are:");

       while(xmlTxtRd.MoveToNextAttribute())
       {
        this._listBox.Items.Add(xmlTxtRd.Name + " = " + xmlTxtRd.Value);
       }
      }
      else
      {
       this._listBox.Items.Add("The Element " + xmlTxtRd.Name + " has no Attribute");
      }
      this._listBox.Items.Add("");
     }
    }
   }
   catch(XmlException xmlExp)
   {
    throw new XmlException(_errMsg + this._xmlPath + xmlExp.ToString());
   }
   finally
   {
    if (this.xmlTxtRd != null)
     this.xmlTxtRd.Close();
   }
  }

  /// <summary>
  /// 读取Xml文件的命名空间
  /// </summary>

  public void ReadXmlNamespace()
  {
   this._listBox.Items.Clear();
   this.xmlTxtRd = new XmlTextReader(this._xmlPath);
   try
   {
    while(xmlTxtRd.Read())
    {
     if (xmlTxtRd.NodeType == XmlNodeType.Element && xmlTxtRd.Prefix != "")
     {
      this._listBox.Items.Add("The Prefix " + xmlTxtRd.Prefix + " is associated with namespace " + xmlTxtRd.NamespaceURI);

      this._listBox.Items.Add("The Element with the local name " + xmlTxtRd.LocalName + " is associated with" + " the namespace " + xmlTxtRd.NamespaceURI);
     }

     if (xmlTxtRd.NodeType == XmlNodeType.Element && xmlTxtRd.HasAttributes)
     {
      while(xmlTxtRd.MoveToNextAttribute())
      {
       if (xmlTxtRd.Prefix != "")
       {
        this._listBox.Items.Add("The Prefix " + xmlTxtRd.Prefix + " is associated with namespace " + xmlTxtRd.NamespaceURI);

        this._listBox.Items.Add("The Attribute with the local name " + xmlTxtRd.LocalName + " is associated with the namespace " + xmlTxtRd.NamespaceURI);

       }
      }
     }
    }
   }
   catch(XmlException xmlExp)
   {
    throw new XmlException(_errMsg + this._xmlPath + xmlExp.ToString());
   }
   finally
   {
    if (this.xmlTxtRd != null)
     this.xmlTxtRd.Close();
   }
  }

  /// <summary>
  /// 读取整个Xml文件
  /// </summary>

  public void ReadXml()
  {
   string attAndEle = string.Empty;
   this._listBox.Items.Clear();
   this.xmlTxtRd = new XmlTextReader(this._xmlPath);

   try
   {
    while(xmlTxtRd.Read())
    {
     if (xmlTxtRd.NodeType == XmlNodeType.XmlDeclaration)
      this._listBox.Items.Add(string.Format("<?{0} {1} ?>",xmlTxtRd.Name,xmlTxtRd.Value));
     else if (xmlTxtRd.NodeType == XmlNodeType.Element)
     {
      attAndEle = string.Format("<{0} ",xmlTxtRd.Name);
      if (xmlTxtRd.HasAttributes)
      {
       while(xmlTxtRd.MoveToNextAttribute())
       {
        attAndEle = attAndEle + string.Format("{0}='{1}' ",xmlTxtRd.Name,xmlTxtRd.Value);
       }
      }

      attAndEle = attAndEle.Trim() + ">";
      this._listBox.Items.Add(attAndEle);
     }
     else if (xmlTxtRd.NodeType == XmlNodeType.EndElement)
      this._listBox.Items.Add(string.Format("</{0}>",xmlTxtRd.Name));
     else if (xmlTxtRd.NodeType == XmlNodeType.Text)
      this._listBox.Items.Add(xmlTxtRd.Value);
    }
   }
   catch(XmlException xmlExp)
   {
    throw new XmlException(_errMsg + this._xmlPath + xmlExp.ToString());
   }
   finally
   {
    if (this.xmlTxtRd != null)
     this.xmlTxtRd.Close();
   }
  }
 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用IIS承载WCF服务版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/xunzaosiyecao/article/details/47065199 作者:jiankunking 出处:http://blog.csdn.net/jiankunking 1、WCF可以方便的通过IIS承载,此承载模型与ASP.NET和ASP.NET Web Service使用的模型类似。 2、WCF可以在以下操作系统上的IIS版本上承载 Windows XP SP2上的IIS 5.1 Windows Server 2003上的IIS 6.0 Windows Server 2008或者Windows Vista或者Windows 7上的IIS 7.0 以及IIS后续版本 小注: 3、在IIS 7.0中提供了一种新的承载服务方式即WAS(Windows Process Activation Service,Windows进程激活服务),使用WAS来承载WCF允许HTTP之外的协议进行激活和网络通信。此环境适合开发可通过WCF支持的任何网络协议(包括HTTP、net.tcp、net、.pipe和net.msmq)进行通信的WCF服务。 在WAS宿主中,可以使用WAS工作进程中的功能,如自动激活服务、健康监控和进程。 要使用WAS宿主,只需创建一个Web站点和工个.svc文件,其中的ServiceHost声明包含服务类的语言和名称。 下面的代码使用 Service1类。另外,还必须指定包含服务类的文件。这个类的实现方式与定义WCF服务库的方式相同。  这不就是平时部署的.svc文件嘛 例如: 4、使用IIS承载的好处: 可以向处理其他任何类型的IIS应用程序一样,部署和管理IIS中承载的WCF服务。 IIS提供进程激活、运行状态管理和回收功能以提高承载的应用程序的可靠性。 像ASP.NET一样,ASP.NET中承载的WCF服务可以利用ASP.NET共享宿主模型,在此模型中,多个应用程序驻留在一个公共辅助进程中以提高服务器密度和可伸缩性。 IIS中承载的WCF服务与ASP.NET2.0使用相同的动态编译模型,该模型简化了承载服务的开发和部署。 IIS承载WCF服务时,IIS5.1和IIS6.0仅限于HTTP通信。 5、WCF具体写法及部署与IIS在此就不重复演示,具体案例可以参考: WCF 部署在IIS上 WCF 入门教程一(动手新建第一个WCF程序并部署) WCF 入门教程二 小注: 1、个人感觉有了锤子就没必要用手敲钉子了,所以搞WCF的时候,使用Visual Studio吧,没必要用文本文件去创建svc等等的文件。 比如说客户端应用程序需要 一 个代理来访问服务。给客户端创建代理就有3种方式 : ● Visual Studio添加服务引用 —— 这个实用程序会从服务的元数据中创建代理类。 ● ServiceModel元数据实用工具svcutil.exe —— 使用svcutil实用程序可以创建代理类。该实用程序从服务中读取元数据 ,以创建代理类。 ● ChanneldFactory类 —— 这个类由svcutil实用程序生成的代理使用 ,然而,它也可以用于以编程方式创建代理。         个人还是感觉 Visual Studio比较自动化一些 2、据说部署WCF,需要激活WCF HTTP激活组件,具体激活方式如下: 安装完成后,可以在:IIS管理器----处理程序映射中看到:svc-Integrated 项,说明安装成功了 但是有个问题就是,我部署WCF时候,么有激活这个服务,为啥WCF也能运行呢?希望有知道的朋友帮忙解答一下,谢谢。 ———————————————— 版权声明:本文为CSDN博主「衣舞晨风」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/jiankunking/article/details/47065199
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值