XMLHelper

public class XMLHelper
    {

        #region 反序列化
        /// <summary>
        /// 反序列化
        /// </summary>
        /// <param name="type">类型</param>
        /// <param name="xml">XML字符串</param>
        /// <returns></returns>
        public static object Deserialize(Type type, string xml)
        {
            try
            {
                using (StringReader sr = new StringReader(xml))
                {
                    XmlSerializer xmldes = new XmlSerializer(type);
                    return xmldes.Deserialize(sr);
                }
            }
            catch (Exception e)
            {

                return null;
            }
        }
        /// <summary>
        /// 反序列化
        /// </summary>
        /// <param name="type"></param>
        /// <param name="xml"></param>
        /// <returns></returns>
        public static object Deserialize(Type type, Stream stream)
        {
            XmlSerializer xmldes = new XmlSerializer(type);
            return xmldes.Deserialize(stream);
        }
        #endregion

        #region 序列化
        /// <summary>
        /// 序列化
        /// </summary>
        /// <param name="type">类型</param>
        /// <param name="obj">对象</param>
        /// <returns></returns>
        public static string Serializer(Type type, object obj)
        {
            MemoryStream Stream = new MemoryStream();
            XmlSerializer xml = new XmlSerializer(type);
            try
            {
                //序列化对象
                xml.Serialize(Stream, obj);
            }
            catch (InvalidOperationException)
            {
                throw;
            }
            Stream.Position = 0;
            StreamReader sr = new StreamReader(Stream);
            string str = sr.ReadToEnd();

            sr.Dispose();
            Stream.Dispose();

            return str;
        }

        #endregion

        /// <summary>
        /// 读取xml格式的字符串的指定节点值
        /// </summary>
        /// <param name="xml">xml字符串</param>
        /// <param name="ElementNames">节点数组,由根节点到指定节点的节点名称</param>
        /// <returns></returns>
        public static string GetElement(string xml, string[] ElementNames)
        {

            //调用示例:

            /*

             <?xml version="1.0" encoding="utf-8"?>

<YG_HCCGFHXX>
  <XMLDATA>
    <HEAD>
      <JSSJ>接收时间</JSSJ>
      <ZTCLJG>消息主体处理结果</ZTCLJG>
      <CWXX>错误提示内容</CWXX>
      <BZXX>备注信息</BZXX>
    </HEAD>
    <MAIN>
      <DDBH>采购单号</DDBH>
    </MAIN>
    <DETAIL>
      <STRUCT>
        <DDMXBH>采购单明细编号</DDMXBH>
        <SXH>顺序号</SXH>
        <HCTBDM>耗材统编代码</HCTBDM>
        <HCXFDM>耗材细分代码</HCXFDM>
        <YYBDDM>医院本地代码</YYBDDM>
        <QYKC>企业库存</QYKC>
        <CLJG>处理结果</CLJG>
        <CLQKMS>处理情况描述</CLQKMS>
      </STRUCT>
    </DETAIL>
  </XMLDATA>
</YG_HCCGFHXX>

             * 如获取以上节点的采购单号值,xmlarr中不算根节点
             *
             *    string[] xmlarr = { "XMLDATA", "MAIN", "DDBH" };
                string DDBH = XMLHelper.GetElement(xml, xmlarr);

             */

            XElement root = XElement.Parse(xml.Trim());

            for (int i = 0; i < ElementNames.Length; i++)
            {
                root = root.Element(ElementNames[i]);
            }

            return root.Value;
        }

        #region XML转义字符处理

        /// <summary>

        /// XML转义字符处理

        /// </summary>

        public static string ConvertXml(string xml)
        {

            xml = (char)1 + xml;   //为了避免首字母为要替换的字符,前加前缀

            for (int intNext = 0; true; )
            {

                int intIndexOf = xml.IndexOf("&", intNext);

                intNext = intIndexOf + 1;  //避免&被重复替换

                if (intIndexOf <= 0)
                {

                    break;

                }

                else
                {

                    xml = xml.Substring(0, intIndexOf) + "&amp;" + xml.Substring(intIndexOf + 1);

                }

            }

            for (; true; )
            {

                int intIndexOf = xml.IndexOf("<");

                if (intIndexOf <= 0)
                {

                    break;

                }

                else
                {

                    xml = xml.Substring(0, intIndexOf) + "&lt;" + xml.Substring(intIndexOf + 1);

                }

            }

            for (; true; )
            {

                int intIndexOf = xml.IndexOf(">");

                if (intIndexOf <= 0)
                {

                    break;

                }

                else
                {

                    xml = xml.Substring(0, intIndexOf) + "&gt;" + xml.Substring(intIndexOf + 1);

                }

            }

            for (; true; )
            {

                int intIndexOf = xml.IndexOf("\"");

                if (intIndexOf <= 0)
                {

                    break;

                }

                else
                {

                    xml = xml.Substring(0, intIndexOf) + "&quot;" + xml.Substring(intIndexOf + 1);

                }

            }

            return xml.Replace(((char)1).ToString(), "");

        }

        #endregion

    }
时间: 2024-10-13 06:36:21

XMLHelper的相关文章

.NET XmlHelper帮助类

public class Program { static void Main(string[] args) { Student stu1 = new Student() { Name = "okbase", Age = 10 }; string xml = XmlHelper.Serializer(typeof(Student), stu1); Console.Write(xml); Student stu2 = XmlHelper.Deserialize(typeof(Studen

C# XML文件操作类XmlHelper

类的完整代码: using System;using System.Collections;using System.Xml; namespace Keleyi.Com.XmlDAL{public class XmlHelper{#region 公共变量XmlDocument xmldoc;XmlNode xmlnode;XmlElement xmlelem;#endregion #region 创建Xml文档/// <summary>/// 创建一个带有根节点的Xml文件/// </s

XMLHelper 辅助类

public class XmlHelper { public XmlHelper() { } public enum XmlType { File, String }; /// <summary> /// 创建XML文档 /// </summary> /// <param name="name">根节点名称</param> /// <param name="type">根节点的一个属性值</para

XMLHelper 类

这个XMLHelper类中包括了XML文档的创建,文档节点和属性的读取,添加,修改,删除的方法功能的实现,有兴趣的朋友,可以进来看看,所有代码都在WebForm和WinForm中调试通过. 这是下面要操作的XML文档: <?xml version="1.0" encoding="utf-8"?><books>  <book id="1" ISDN="1001001001">    <n

XMLHelper类 源码(XML文档帮助类,静态方法,实现对XML文档的创建,及节点和属性的增、删、改、查)

以下是代码: using System;using System.Collections.Generic;using System.Linq;using System.Web; using System.Xml; namespace WebApplication2{ /// <summary>    /// XMLHelper XML文档操作管理器    /// </summary>    public class XMLHelper    {        public XMLH

[No0000DE]C# XmlHelper XML类型操作 类封装

using System; using System.Data; using System.IO; using System.Text; using System.Threading; using System.Xml; using System.Xml.Serialization; using Shared; namespace Helpers { public static class XmlHelper { #region Fields and Properties public enum

XmlHelper 通用类

/// <summary> /// 提供对XML数据的读写 /// </summary> public sealed class XmlHelper { /// <summary> /// 声明一个XmlDocument空对象 /// </summary> private XmlDocument _xmlDoc = new XmlDocument(); /// <summary> /// 构造函数,导入Xml文件 /// </summary

全文搜索的数据库及实体实现

在日常的业务场景中,不见得每一类的数据都需要结构化存储,很多情况下,只是将某个表单的数据保存下来就可以了,至于后续的查询,除了表单的ID以外,更多的是依靠全文检索来实现的. 目前我们有很多流程,主要工作方式是:启动时,从主数据中获取相应的数据变成交易数据,经过流程各环节的处理,流程结束时,交易数据再写回到主数据中.在这个过程中,除了流程之外,查询交易数据的机会很少(全文检索除外).因此,为过程中大量的交易数据进行数据库设计的意义就不是很大了. 除主键RESOURCE_ID外,最关键的是XML_C

在.net中序列化读写xml方法的总结

在.net中序列化读写xml方法的总结 阅读目录 开始 最简单的使用XML的方法 类型定义与XML结构的映射 使用 XmlElement 使用 XmlAttribute 使用 InnerText 重命名节点名称 列表和数组的序列化 列表和数组的做为数据成员的序列化 类型继承与反序列化 反序列化的实战演练 反序列化的使用总结 排除不需要序列化的成员 强制指定成员的序列化顺序 自定义序列化行为 序列化去掉XML命名空间及声明头 XML的使用建议 XML是一种很常见的数据保存方式,我经常用它来保存一些