<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);
}