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

    }

 

posted @ 2017-07-21 14:19  妖狐鬼魅  阅读(418)  评论(0编辑  收藏  举报