kenlistian

勤学多思

  IT博客 :: 首页 :: 新随笔 ::  :: 聚合  :: 管理 ::
  412 随笔 :: 0 文章 :: 23 评论 :: 0 Trackbacks

 

 

<smart2000>

  <superPin></superPin>

   <modules>

       <module id = "0">

         <item1></itme1>

         <item1></itme1>

      </module>

       <module id = "1">

          <item1></itme1>

         <item1></itme1>

      </module>

      ...

  </moudules>

</smart2000>

 

 

1.Modules”节点的值没有固定,在这里就直接写入,声明存在这个节点,不指定“Modules”节点里的格式。

public static XElement GenerateXmlFile(string appId)

 XElement myXDoc = new XElement(
                   new XElement("Smart2000",
                           new XElement("SuperPin", superPin),
                           new XElement("Modules")
                           );

}

 

2.指定Modules的格式:

public static XElement GenerateXmlFile(string appId)

 XElement myXDoc = new XElement(
                   new XElement("Smart2000",
                           new XElement("SuperPin", superPin),
                           new XElement("Modules",
                                   new XElement("Modules",
                                     new XAttribute("ID", "0"),
                                     new XAttribute("enable", "true"),
                                     new XAttribute("name", "Module" + 0),
                                     new XAttribute("Data", "")
                                       )

            )
              );

}

 

 

 

3. 插入嵌套节点

  

       //先加载XElement根节点
        XElment myXDoc = XElment.Load("@xxx.xml");



        public static XElement AddNode(XElement myXDoc, int num, string name, string data)
        {
            XElement xele = myXDoc.Element("Modules");  //在xml文件里取出该节点
              XElement x = xele.Element("Module");         //在该节点下取到第一行初始化的数据

             if (Convert.ToString(x.Attribute("id").Value) == num)
            {
                xele.RemoveAll();//删除该节点的全部内容
             }


            xele.Add(new XElement("Module",
                  new XAttribute("id", num),
                                 new XAttribute("enable", "true"),
                                 new XAttribute("name", name),
                                 new XAttribute("Data", data)));
            return myXDoc;
        }

估计上面有些小问题,但是采取获取某个XElment之下的XElment然后调用Add()是通用方法.一般而言,先删除该节点下所有的,再加入.反复循环调用AddNode,即可实现插入Modules下的多个Module.

 

4.AddNode

   

 

private static void ModifyXmlElement(string xmlpath, string strElement)  
{  
    XElement xe = XElement.Load(xmlpath);  

    IEnumerable<XElement> element = from e in xe.Elements("Book")  
                                   where e.Attribute("BookID").Value == strElement  
                                    select e;  
    ///修改元素
    if (element.Count() > 0)  
    {  
        XElement firstelement = element.First();  
        ///设置新的属性
         firstelement.SetAttributeValue("BookID", "new004");  
       
       ///替换成新的节点
         firstelement.ReplaceNodes(  
             new XElement("BookNo", "new0004"),  
             new XElement("BookName", "Book new0004"),  
             new XElement("BookPrice", "45"),  
             new XElement("BookRemark", "This is a book new0004")  
        );  
    
       //上面一段,可以改为先删除,再直接添加该节点更方便
       //对上面进行先屏蔽
        firstelement.RemoveAll();
    } 
    
    firstelement.Add(new XElement("BookNo","new004"),
                              new XElement("BookName", "book new0004"),
                              new XElement("BookPrice", "45"),
                             new XElement("BookRemark", "this is a book new004")
               );
    
  
    xe.Save(xmlpath);  

}

 

 

 

 
posted on 2013-05-02 17:44 kenlistian 阅读(839) 评论(0)  编辑 收藏 引用 所属分类: csharp
只有注册用户登录后才能发表评论。