解决方案 »

  1.   

    使用什么方式操作xml才是最重要的。
    参见:http://blog.csdn.net/duanzi_peng/article/details/24018431
      

  2.   

    用linq to xml            XDocument xml1 = XDocument.Load("C:\\1.xml");
                XDocument xml2 = XDocument.Load("C:\\2.xml");
                XElement root = xml2.Element("Program").Element("Pages").Element("Page").Element("Windows");
                var textWindowAttr = root.Element("TextWindow").Attributes();
                var multiLineTextAttr = root.Element("TextWindow").Element("MultiLineText").Attributes();
                var textAttr = root.Element("TextWindow").Element("MultiLineText").Element("Text").Attributes();
                var pages = xml1.Element("RESPONSE").Elements().Where(x => x.Name.LocalName.StartsWith("PAGE", true, null));
                foreach (var v in pages)
                {
                    XElement textWindow = new XElement("TextWindow");
                    foreach (var a1 in textWindowAttr)
                    {
                        textWindow.SetAttributeValue(a1.Name.LocalName, a1.Value);
                    }
                    XElement multiLineText = new XElement("MultiLineText");
                    foreach (var a1 in multiLineTextAttr)
                    {
                        multiLineText.SetAttributeValue(a1.Name.LocalName, a1.Value);
                    }
                    XElement text = new XElement("Text");
                    foreach (var a1 in textAttr)
                    {
                        text.SetAttributeValue(a1.Name.LocalName, a1.Value);
                    }
                    text.SetAttributeValue("Text", v.Element("DATA").Value);
                    multiLineText.Add(text);
                    textWindow.Add(multiLineText);
                    root.Add(textWindow);
                }
                xml2.Save("C:\\2.xml");
      

  3.   

    XmlDocument xmlTemp = new XmlDocument();
               xmlTemp.Load(CatchFile);
               XmlNode rootNode = xmlTemp.SelectSingleNode("catch");
               XmlNode node = xmlTemp.CreateElement("time");
               node.Attributes.Append(CreateAttribute(node, "name", deveceNo));
               node.Attributes.Append(CreateAttribute(node, "loadtime", uploadtime));
             
               rootNode.AppendChild(node);
            
               for (int i=rootNode.ChildNodes.Count-1;i>=0;i--)
               {
                   XmlElement elem = rootNode.ChildNodes[i] as XmlElement;
                   if(DateTime.Now.AddMinutes(-1)>=DateTime.Parse(elem.GetAttribute("loadtime")))
                   {
                       rootNode.RemoveChild(rootNode.ChildNodes[i]);
                   }
               }
                xmlTemp.Save(CatchFile);创建节点和节点属性
      

  4.   


    真是高手,谢谢!解决了我的问题 ,不过 我还有一个问题。就是这个textwindow开始是一个都不存在的,是我在遍历Page之后才导入的格式,也可以理解为第3个XML追加到windows,按照您这样的实现方式的话,会多出来一个textwindow 这样数据格式不满足的要求,希望您再看看 这个该怎么实现。感激不尽 我自己也在看您的代码 需要消化
      

  5.   

    那就这样,节点属性自己加一下            XDocument xml1 = XDocument.Load("C:\\1.xml");
                XDocument xml2 = XDocument.Load("C:\\2.xml");
                XElement root = xml2.Element("Program").Element("Pages").Element("Page").Element("Windows");
                var pages = xml1.Element("RESPONSE").Elements().Where(x => x.Name.LocalName.StartsWith("PAGE", true, null));
                foreach (var v in pages)
                {
                    root.Add(new XElement("TextWindow",
                                new XElement("MultiLineText",
                                    new XElement("Text",
                                        new XAttribute("Text",v.Element("DATA").Value)))));
                }
                xml2.Save("C:\\2.xml");