IT职业工程师's Archiver

蓝色梦幻 发表于 2008-5-14 14:24

xml操作(及tfp读取操作)

分为以上几个部分:
1.建立xml(看以下实例)
private void InitNewsText(ArrayList aa)//这种例子是传入一个Arraylist做为参数,代表了xml赋值时的每个节点的不同值做为一个类的一个集合,这里的节点是没有属性值的:
        {
            XmlDocument doc = new XmlDocument();
            doc.AppendChild(doc.CreateXmlDeclaration("1.0", "GB2312", null));
            XmlElement element1 = doc.CreateElement("iTV");
            XmlNode node = doc.AppendChild(element1);

            //初始化
            for (int i = 0; i < 6; i++)
            {
                ScrollNews2 ss = (ScrollNews2)aa[i];
                if (i < aa.Count)
                {
                    XmlElement element = doc.CreateElement("News");
                    node = node.AppendChild(element);
                    element = doc.CreateElement("Title");
                    element.AppendChild(doc.CreateTextNode(ss.Title));
                    node.AppendChild(element);

                    element = doc.CreateElement("Content");
                    element.AppendChild(doc.CreateTextNode(ss.Content));
                    node.AppendChild(element);

                    element = doc.CreateElement("Column");
                    element.AppendChild(doc.CreateTextNode(ss.Column));
                    node.AppendChild(element);

                    element = doc.CreateElement("PublishTime");
                    element.AppendChild(doc.CreateTextNode(ss.Publishtime.ToString("yyyyMMddHHmmss")));
                    node.AppendChild(element);

                    element = doc.CreateElement("URL");
                    element.AppendChild(doc.CreateTextNode(ss.Url));
                    node.AppendChild(element);
                }
                else
                {
                    XmlElement element = doc.CreateElement("News");
                    node = node.AppendChild(element);
                    element = doc.CreateElement("Title");
                    //element.AppendChild(doc.CreateTextNode(ss.Title));
                    node.AppendChild(element);

                    element = doc.CreateElement("Content");
                    element.AppendChild(doc.CreateTextNode(ss.Content));
                    node.AppendChild(element);

                    element = doc.CreateElement("Column");
                    //element.AppendChild(doc.CreateTextNode(ss.Column));
                    node.AppendChild(element);

                    element = doc.CreateElement("PublishTime");
                    //element.AppendChild(doc.CreateTextNode(ss.Publishtime.ToString("yyyyMMddHHmmss")));
                    node.AppendChild(element);

                    element = doc.CreateElement("URL");
                    //element.AppendChild(doc.CreateTextNode(ss.Url));
                    node.AppendChild(element);
                }
            }
//这里是ftp操作,
            ftp.Put(Encoding.GetEncoding("GB2312").GetBytes(doc.OuterXml), newstext + ".sending");
            try { ftp.Delete(newstext); }
            catch { }
            ftp.Rename(newstext + ".sending", newstext);
        }
xml格式诸如:
<x>
<y>
<y1></y1>
</y>
<y>
<y1></y1>
</y>
</x>
另一种:是有属性的xml诸如:
代码例子:
private void InitNewsDisplayUrl(NewsDisplay display)//nodeElem.SetAttribute( "attr ", "attrValue ");//添加属性节点
        {

            string[] urls ={ display.LinkUrl1, display.LinkUrl2, display.LinkUrl3 };
            string[] names ={ display.PicName1, display.PicName2, display.PicName3 };
            XmlDocument doc = new XmlDocument();
            doc.AppendChild(doc.CreateXmlDeclaration("1.0", "GB2312", null));
            XmlElement element = doc.CreateElement("root");
            XmlNode node = doc.AppendChild(element);

            //初始化
            for (int i = 1; i < 5; i++)//四个频道
            {
                element = doc.CreateElement("channel");
                node = doc.DocumentElement .AppendChild(element);
                XmlAttribute newatt = doc.CreateAttribute("id");
                newatt.InnerText = i.ToString();
                element.Attributes.Append(newatt);
                //三个连接
                for (int j = 0; j < 3; j++)
                {
                    if (display.ID.ToString() == i.ToString())
                    {
                        element = doc.CreateElement("item");
                        node = doc.DocumentElement.AppendChild(element);
                        newatt = doc.CreateAttribute("picName");
                        newatt.InnerText =names[j];
                        element.Attributes.Append(newatt);
                        newatt = doc.CreateAttribute("linkUr");
                        newatt.InnerText =urls[j];
                        element.Attributes.Append(newatt);
                    }
                    else
                    {
                        element = doc.CreateElement("item");
                        node = doc.DocumentElement.AppendChild(element);
                        newatt = doc.CreateAttribute("picName");
                        newatt.InnerText = "";
                        element.Attributes.Append(newatt);
                        newatt = doc.CreateAttribute("linkUr");
                        newatt.InnerText = "";
                        element.Attributes.Append(newatt);
                    }
                }
            }
            ftp.Put(Encoding.GetEncoding("GB2312").GetBytes(doc.OuterXml), newsDisplay );
         }
      xml例子诸如:
<x>
<y id="">
<y1 name="" url="">
</y>
<y id="">
<y1 name="" url="">
</y>

</x>

2读写xml
//第一种是针对有属性的
string[] urls ={ display.LinkUrl1, display.LinkUrl2, display.LinkUrl3 };
                string[] names ={ display.PicName1, display.PicName2, display.PicName3 };
                XmlNode nodeone = doc.SelectSingleNode("root");
                foreach (XmlNode node in nodeone.ChildNodes)
                {
                       if (node.Attributes[0].Value == display.ID.ToString())
                       {
                           for (int i = 0; i < node.ChildNodes.Count; i++)
                           {
                                  node.ChildNodes[i].Attributes[0].Value = names[i];
                                  node.ChildNodes[i].Attributes[1].Value = urls[i];
                           }
                       }
                     
                    }
//这种针对没有属性的
XmlNodeList nodelist = doc.SelectNodes("/iTV/News");
                if(nodelist .Count >0)
                {
                   for(int i=0;i<nodelist .Count ;i++)
                   {
                        //hasNode = true;
                       if (i < aa.Count)
                       {
                           ScrollNews2 ss = (ScrollNews2)aa[i];
                           nodelist[i].SelectSingleNode("Title").InnerText = ss.Title;
                           nodelist[i].SelectSingleNode("Content").InnerText = ss.Content;
                           nodelist[i].SelectSingleNode("Column").InnerText = ss.Column;
                           nodelist[i].SelectSingleNode("PublishTime").InnerText = ss.Publishtime.ToString("yyyyMMddHHmmss");
                           nodelist[i].SelectSingleNode("URL").InnerText = ss.Url;
                       }
                     
                   }
3ftp操作xml,涉及到一个组件.dll
下载地址:

具体操作:包括ftp的连接和断开,这些都不详说了,有关操作xml的部分

蓝色梦幻 发表于 2008-5-14 14:37

(续)上

不想文章会自己跳走(所以只好接着写续了)
组件名称:edtftpnet-1.1.8.dll,自已去网上下吧
xml的有关操作代码
XmlDocument doc = new XmlDocument();
                if (HttpRuntime.Cache["newstext.xml"] == null)
                {
                    byte[] bytes = ftp.Get(NewsTextFileName);
                    if (bytes.Length == 0) { InitNewsText(aa); return; };
                    doc.LoadXml(Encoding.GetEncoding("GB2312").GetString(bytes));
                    HttpRuntime.Cache.Add("newstext.xml", doc, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
                }
                else
                {
                    doc = (XmlDocument)HttpRuntime.Cache["newstext.xml"];
                }

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.