zoukankan      html  css  js  c++  java
  • 生成XML文件。

    之前的项目需要涉及到对XML文件的读写,由于之前没怎么接触过这方面的知识,于是在网上查找并试验出了具体的实现方法:

    第一种方法:

     1 //动态的一个节点一个节点的生成XML文件
     2 public void CreateXmlFile(string aaa)
     3 {
     4 XmlDocument xmlDoc = new XmlDocument();
     5 xmlDoc.CreateDocumentType("plist", "", "", "");
     6 //创建类型声明节点 
     7 XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");
     8 xmlDoc.AppendChild(node);
     9 XmlDocumentType docType = new XmlDocumentType();
    10 // node.InnerXml="<!DOCTYPE plist PUBLIC '-//Apple//DTD PLIST 1.0//EN' 'http://www.apple.com/DTDs/PropertyList-1.0.dtd' >";
    11 //创建根节点 
    12 XmlNode root = xmlDoc.CreateElement("plist");
    13 xmlDoc.AppendChild(root);
    14 
    15 XmlNode dict = xmlDoc.CreateNode(XmlNodeType.Element, "dict",null);
    16 CreateNode(xmlDoc, dict, "key", "items");
    17 
    18 root.AppendChild(dict);
    19 XmlNode array = xmlDoc.CreateElement("array");
    20 
    21 XmlNode dict1 = xmlDoc.CreateElement("dict");
    22 CreateNode(xmlDoc, dict1, "key", "assets");
    23 
    24 XmlNode array1 = xmlDoc.CreateElement("array");
    25 
    26 XmlNode dict2 = xmlDoc.CreateElement("dict");
    27 CreateNode(xmlDoc, dict2, "key", "kind");
    28 CreateNode(xmlDoc, dict2, "string", "software-package");
    29 CreateNode(xmlDoc, dict2, "key", "url");
    30 //文件下载地址
    31 CreateNode(xmlDoc, dict2, "string", "https://app.yuntian.net/ipa/DealerPortal_1.0.ipa");
    32 array1.AppendChild(dict2);
    33 XmlNode dict3 = xmlDoc.CreateElement("dict");
    34 CreateNode(xmlDoc, dict3, "key", "kind");
    35 CreateNode(xmlDoc, dict3, "string", "full-size-image");
    36 CreateNode(xmlDoc, dict3, "key", "needs-shine");
    37 XmlNode true1 = xmlDoc.CreateElement("true");
    38 dict3.AppendChild(true1);
    39 CreateNode(xmlDoc, dict3, "key", "url");
    40 //http或者https链接的图片地址,可直接使用app对应的icon(分辨率没强制要求)
    41 CreateNode(xmlDoc, dict3, "string", "https://app.yuntian.net/images/ios1.png");
    42 array1.AppendChild(dict3);
    43 XmlNode dict4 = xmlDoc.CreateElement("dict");
    44 CreateNode(xmlDoc, dict4, "key", "kind");
    45 CreateNode(xmlDoc, dict4, "string", "display-image");
    46 CreateNode(xmlDoc, dict4, "key", "needs-shine");
    47 XmlNode true2 = xmlDoc.CreateElement("true");
    48 dict4.AppendChild(true2);
    49 CreateNode(xmlDoc, dict4, "key", "url");
    50 //http或者https链接的图片地址,可直接使用app对应的icon(分辨率没强制要求)
    51 CreateNode(xmlDoc, dict4, "string", "https://app.yuntian.net/images/xlogo.png");
    52 array1.AppendChild(dict4);
    53 
    54 
    55 dict1.AppendChild(array1);
    56 
    57 CreateNode(xmlDoc, dict1, "key", "metadata");
    58 XmlNode dict5 = xmlDoc.CreateElement("dict");
    59 CreateNode(xmlDoc, dict5, "key", "bundle-identifier");
    60 CreateNode(xmlDoc, dict5, "string", aaa);
    61 CreateNode(xmlDoc, dict5, "string", "0.0.1");
    62 CreateNode(xmlDoc, dict5, "key", "kind");
    63 CreateNode(xmlDoc, dict5, "string", "software");
    64 CreateNode(xmlDoc, dict5, "key", "title");
    65 CreateNode(xmlDoc, dict5, "string", "经销商门户");
    66 
    67 dict1.AppendChild(dict5);
    68 array.AppendChild(dict1);
    69 dict.AppendChild(array);
    70 
    71 
    72 try
    73 {
    74 xmlDoc.Save("F:/XML/data5.plist");
    75 }
    76 catch (Exception e)
    77 {
    78 //显示错误信息 
    79 Console.WriteLine(e.Message);
    80 }
    81 //Console.ReadLine();
    82 
    83 }
    84 public void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value)
    85 {
    86 XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null);
    87 node.InnerText = value;
    88 parentNode.AppendChild(node);
    89 }
    View Code

    这种方法比较笨,一个个节点的创建,不灵活,并且容易出错

    第二种方法:

            //直接根据XML文件的内容生成XML文件
    //        public void createXmlLode()
    //        {
    //            XmlDocument xmldoc = new XmlDocument(); //创建空的XML文档 
    //            xmldoc.LoadXml("<?xml version='1.0' encoding='UTF-8'?>" +
    //"<!DOCTYPE plist PUBLIC '-//Apple//DTD PLIST 1.0//EN' 'http://www.apple.com/DTDs/PropertyList-1.0.dtd' >" +
    //"<plist version='1.0'>" +
    //  "<dict>" +
    //   " <key>items</key>" +
    //    "<array>" +
    //     " <dict>" +
    //      "  <key>assets</key>" +
    //       "<array>" +
    //        "  <dict>" +
    //         "   <key>kind</key>" +
    //          "  <string>software-package</string>" +
    //           " <key>url</key>" +
    //           " <string>https://app.yuntian.net/ipa/DealerPortal_1.0.ipa</string>" +
    //         " </dict>" +
    //         " <dict>" +
    //          "  <key>kind</key>" +
    //           " <string>full-size-image</string>" +
    //           " <key>needs-shine</key>" +
    //           " <true/>" +
    //           " <key>url</key>" +
    //           " <string>https://app.yuntian.net/images/ios1.png</string>" +
    //          "</dict>" +
    //          "<dict>" +
    //         "   <key>kind</key>" +
    //          "  <string>display-image</string>" +
    //           " <key>needs-shine</key>" +
    //           " <true/>" +
    //           " <key>url</key>" +
    
    //           " <string>https://app.yuntian.net/images/xlogo.png</string>" +
    //          "</dict>" +
    //        "</array>" +
    //     "   <key>metadata</key>" +
    //      "  <dict>" +
    //       "   <key>bundle-identifier</key>" +
    
    //        "  <string>com.ytsoft.dealerportal</string>" +
    //     "     <key>bundle-version</key>" +
    //       "   <string>0.0.1</string>" +
    //       "   <key>kind</key>" +
    //     "     <string>software</string>" +
    //     "     <key>title</key>" +
    //      "    <string>经销商门户</string>" +
    //       " </dict>" +
    //      "</dict>" +
    //    "</array>" +
    // " </dict>" +
    //"</plist>");
    //            xmldoc.Save("F:/XML/ppp.plist"); //保存 
    //        }
      
    View Code

    一股脑的将所有的XML文件手写出来,然后生成。说实话,也挺麻烦的。就找到了这两种方法,最后发现都挺麻烦。

    最后在组长的指导下,根据现有的模板自动生成Xml文件,虽然代码写得有点戳,但是基本自己完成,好歹算个进步吧。

     /// <summary>
            /// 根据模板动态生成XML文件
            /// </summary>
            /// <param name="DownUrl">安装包下载地址</param>
            /// <param name="ImageUrl">图片地址</param>
            /// <param name="SmallImageUrl">小图标地址</param>
            /// <param name="AppName">app包名</param>
            /// <param name="version">版本号</param>
            /// <param name="title">标题</param>
            public void CreateXMLByTemplet(string DownUrl, string ImageUrl, string SmallImageUrl, String AppName, string version,string title)
            {
                try
                {
                    XmlDocument doc = new XmlDocument();
                      //加载Xml文件 
                    string Templeturl="http://localhost:8031/Approval.7.3.plist";
                    if (File.Exists(Templeturl))
                    {
                        Alert.Show("无此文件!");
                    }
                    doc.Load(Templeturl);  
                    XmlElement rootElem = doc.DocumentElement;   //获取根节点  
                    XmlNodeList dNode = rootElem.GetElementsByTagName("dict"); //获取dict子节点集合
    
                    foreach (XmlNode node in dNode)
                    {
                        XmlElement xe = (XmlElement)node;
                        // 得到Type和ISBN两个属性的属性值
                        XmlNodeList xnl0 = xe.ChildNodes;
                        for (int i = 0; i < xnl0.Count; i++)
                        {
                            if (xnl0.Item(i).InnerText == "software-package")
                            {
                                xnl0.Item(i + 3).InnerText = DownUrl;
                            }
                            if (xnl0.Item(i).InnerText == "full-size-image")
                            {
                                xnl0.Item(i + 5).InnerText = ImageUrl;
                            }
                            if (xnl0.Item(i).InnerText == "display-image")
                            {
                                xnl0.Item(i + 5).InnerText = SmallImageUrl;
                            }
                            if (xnl0.Item(i).InnerText == "bundle-identifier")
                            {
                                xnl0.Item(i + 2).InnerText = AppName;
                            }
                            if (xnl0.Item(i).InnerText == "bundle-version")
                            {
                                xnl0.Item(i + 2).InnerText = version;
                            }
                            if (xnl0.Item(i).InnerText == "title")
                            {
                                xnl0.Item(i + 2).InnerText = title;
                            }
                        }
                    }
    
                    doc.Save("F:/XML/aaa.plist");
                    Alert.Show("保存成功!");
                }
                catch (Exception ex)
                {
                    Alert.Show("保存失败!"+ex);
                }
            }

    另外,需要注意的是,在XML文件中,注释也算节点的。。

  • 相关阅读:
    Maven 打war包
    linuxan安装redis出现Newer version of jemalloc required错误
    Linux常用命令
    Linux重启和关机命令
    CentOS 端口和防火墙操作
    修改root密码
    Web登录验证之 Shiro
    No WebApplicationContext found: no ContextLoaderListener registered
    java写文件实现换行
    gcc命令详解
  • 原文地址:https://www.cnblogs.com/yangxing8jn/p/5952876.html
Copyright © 2011-2022 走看看