• XML的一些事


    XML文件的优缺点:

    使用XML作为传输格式的优势:
    1. 格式统一, 符合标准
    2. 容易与其他系统进行远程交互, 数据共享比较方便
    3.调用将 XML 用作传输的现有服务。
    4.使用 XSLT 可以动态转换 XML。这是企业服务总线 (ESB) 方案中的理想功能。

    缺点:
    1. XML文件格式文件庞大, 格式复杂, 传输占用带宽;
    2. 服务器端和客户端都需要花费大量代码来解析XML, 不论服务器端和客户端代码变的异常复杂和不容易维护;
    3. 客户端不同浏览器之间解析XML的方式不一致, 需要重复编写很多代码;
    4. 服务器端和客户端解析XML花费资源和时间;

     现在大家大多数都用的json但是XML文件的重要性不可忽略,XML文件也是比较脆弱的!

     拼接的字符串写入到XML文件中:

           public static void WriteXMLWay()
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("<?xml version="1.0" encoding="UTF-8" ?>");
                sb.Append("<sitemapindex><sitemap>");
                for (int i = 1; i <= GetSitmapCount(); i++)
                {
                    sb.Append(GetSiteMapFormat(string.Format("http://www.website.com/sitemap/shenma/detail_{0}.xml", i)));
                }
                sb.Append("</sitemap></sitemapindex>");
                try
                {
                    //方法一
                    XmlDocument xd = new XmlDocument();
                    xd.LoadXml(sb.ToString());
                    xd.Save(@"\sitemap.xml");
                    //方法二
                    File.WriteAllText(@"\sitemap.xml", sb.ToString(), Encoding.UTF8);
                }
                catch (Exception ex)
                {
                    XX.General.Exception.Error(ex, "ExecuteUpdateXmlforShenMa");
                }
            }

    去除XML文件里面的特殊字符:

      public static string FormatXmlText(string strHtml)
            {
                string[] aryReg = { "'", "<", ">", "%", """", ",", ".", ">", "<", "\", ">=", "=<", "-", "_", ";", "||", "[", "]", "&", "/", "-", "|", " ", };
                for (int i = 0; i < aryReg.Length; i++)
                {
                    strHtml = strHtml.Replace(aryReg[i], string.Empty);
                }
                return strHtml.Replace("[\x00-\x08\x0b-\x0c\x0e-\x1f]", "");
            }

    XML序列化时生成CDATA节点解决方法:

        public partial class Person
        {
            [XmlIgnore]
            public string Name { get; set; }        
    
            [XmlIgnore]
            public int Age { get; set; }        
        }
    
        public partial class Person
        {
            [XmlElement("Name")]
            public XmlNode aaa
            {
                get
                {
                    XmlNode node = new XmlDocument().CreateNode(XmlNodeType.CDATA, "", "");
                    node.InnerText = Name;
                    return node;
                }
                set { } //省略则aaa不会被序列化
            }
            [XmlElement("Age")]
            public XmlNode bbb
            {
                get
                {
                    XmlNode node = new XmlDocument().CreateNode(XmlNodeType.Text, "", "");
                    node.InnerText = Age.ToString();
                    return node;
                }
                set { } //省略则bbb不会被序列化
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                string result = string.Empty;
                Person person = new Person() { Name = "dnawo", Age = 100 };
                using (MemoryStream output = new MemoryStream())
                {
                    XmlSerializer serializer = new XmlSerializer(person.GetType());
                    serializer.Serialize(output, person);
                    result = Encoding.UTF8.GetString(output.ToArray());
                }
                Console.WriteLine(result);
    
                Console.ReadKey();
            }
        }

    输出的XML代码:

    <?xml version="1.0"?>
    <Person xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <Name><![CDATA[dnawo]]></Name>
      <Age>100</Age>
    </Person>

    字符串写入XML编码的问题:

      XmlDocument xd = new XmlDocument();
                using (Utf8StringWriter sw = new Utf8StringWriter())
                {
                    try
                    {
                        XmlSerializer xz = new XmlSerializer(shenma.GetType());
                        xz.Serialize(sw, shenma);
                        xd.LoadXml(sw.ToString());
                        xd.Save(string.Format(@"\SiteMapshenmadetail_{0}.xml", i));
                    }
                    catch (Exception ex)
                    {
                        XX.General.Exception.Error(ex, "ExecuteUpdateXmlforShenMa");
                    }
                    finally
                    {
                        redisclient.SetString("sitemap_shenma_novelid", novelid.ToString());
                        System.Threading.Thread.Sleep(5000);
                    }
                }

    //让stringreader的编码默认为utf-8string

       public sealed class Utf8StringWriter : StringWriter
            {
                public override Encoding Encoding { get { return Encoding.UTF8; } }
            }

     个人观点:XML文件逐渐被JSON代替,XML文件比较脆弱,用着没JSON好用!

     

  • 相关阅读:
    JS开发框架DevExtreme v20.1.7上线
    Web开发:看如何定义Kendo UI Grid Width
    如何创建自定义DevExpress报表控件,看完你就懂了
    高性能HTML5/JavaScript开发框架DevExtreme全新发布v20.1.7|附下载
    WPF界面开发:如何将不同集合中的项目显示为同一父节点子项
    界面开发包DevExpress v20.1.7上线!即刻体验
    WPF界面开发2020:Scheduler等控件功能升级
    Winform界面开发看过来!一招教你使用属性网格自定义编辑器
    将从数据库查询出来的带有父子结构的list转换成treeList结构
    将JDBC ResultSet结果集转成List
  • 原文地址:https://www.cnblogs.com/viaiu/p/5220170.html
Copyright © 2020-2023  润新知