zoukankan      html  css  js  c++  java
  • 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好用!

     

  • 相关阅读:
    8. String to Integer (atoi)
    PHP Warning: strftime(): It is not safe to rely on the system's timezone set
    Jackson 使用
    用vim去掉utf-8 BOM
    oracle 11g 从 dmp 文件中导出 sql 代码 的方法.
    git gitosis 添加项目
    Linux gcc和gdb程序调试用法 {转}
    Dos中转义符
    HTML样式链接到外部样式表
    转:财富与智慧
  • 原文地址:https://www.cnblogs.com/viaiu/p/5220170.html
Copyright © 2011-2022 走看看