2014-01-14 27 views
0

我應該如何在XElement中添加X?如何在XML文件中添加元素?

 XDocument triggerDocument = new XDocument(
          new XDeclaration("1.0", "utf-8", null)); 
      XElement triggerRoot = new XElement("config", 
      new XElement("maketool-config", 
      new XElement("hmi", new XElement("Messages",X)))); 
      triggerDocument.Add(triggerRoot); 
      triggerDocument.Save(Path.Combine(outPath, "_triggers.xml")); 

     for (int i = 0; i <= events.Count; i++) 
     { 
      foreach (var item in events) 
      { 
       triggerRoot.Add(new XElement("n", 
       new XAttribute("page", item.page), 
       new XAttribute("sequence", item.sequence), 
       new XAttribute("priority", item.priority), 
       new XAttribute("errorText", item.errorText) 
       )); 
      } 
     } 

所以它應該是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<config schema ="sdk-hmi.xsd"> 
    <maketool-config> 
    <hmi> 
     <messages> 
     <n page="" sequence="" priority="" errorText="" /> 
     <n page="" sequence="" priority="" errorText="" /> 
     <n page="" sequence="" priority="" errorText="" /> 
     <n page="" sequence="" priority="" errorText="" /> 
     <n page="" sequence="" priority="" errorText="" /> 
     </messages> 
    </hmi> 
    </maketool-config> 
</config> 

回答

2

你可以傳遞一個XElement[]IEnumerable<XElement>XElement的構造:

var messages = events.Select(item => new XElement("n", 
       new XAttribute("page", item.page), 
       new XAttribute("sequence", item.sequence), 
       new XAttribute("priority", item.priority), 
       new XAttribute("errorText", item.errorText) 
       )); 

XDocument triggerDocument = new XDocument(
        new XDeclaration("1.0", "utf-8", null)); 

XElement triggerRoot = new XElement("config", 
    new XElement("maketool-config", 
    new XElement("hmi", 
    new XElement("Messages", messages))) // <<<--- This is the important part. 
); 
triggerDocument.Add(triggerRoot); 
+0

我不想生成隨機數...我寫的作品,並通過事件的列表去和代碼生成我想要的物品!我只是不知道如何將它添加到XElement ... – matarsak

+0

您誤解了我發佈的代碼,再次閱讀它。 'Enumerable.Range(0,5)'僅用於生成一對示例消息。你可以自己創建一個這樣的元素的數組 - 重要的部分是將數組傳遞給'XElement'構造器 – DarkWanderer

+0

用你的新「事件」代碼更新了我的答案。 – DarkWanderer

0

你可以試試這個:

XDocument triggerDocument = new XDocument(
     new XDeclaration("1.0", "utf-8", null)); 

XElement triggerRoot = new XElement("config", 
new XElement("maketool-config", 
new XElement("hmi", new XElement("Messages")))); 
triggerDocument.Add(triggerRoot); 

XElement msgNode = triggerRoot.Elements("Messages") 
             .SingleOrDefault(); 

if (msgNode != null) 
{ 
    foreach (var item in events) 
    { 
     msgNode.Add(new XElement("n", 
     new XAttribute("page", item.page), 
     new XAttribute("sequence", item.sequence), 
     new XAttribute("priority", item.priority), 
     new XAttribute("errorText", item.errorText) 
     )); 
    } 

} 
0

願這將有助於增加節點...

 //file name 
     string filename = @"d:\temp\XMLFile2.xml"; 

     //create new instance of XmlDocument 
     XmlDocument doc = new XmlDocument(); 

     //load from file 
     doc.Load(filename); 

     //create node and add value 
     XmlNode node = doc.CreateNode(XmlNodeType.Element, "Genre_Genre_Country", null); 
     node.InnerText = "this is new node"; 

     //add to elements collection 
     doc.DocumentElement.AppendChild(node); 

     //save back 
     doc.Save(filename); 
+0

-1:OP使用LINQ to SQL,而不是'XmlDocument'。 –