2013-07-25 176 views
1

如何向C#中的rssd = 3284070 子Rssd節點添加另一個概念節點(Concept Key =「1234」R),我使用XElements來構造所有的XML。我需要一個linq語句嗎?如何在另一個子節點內添加子節點

<Root> 
<Rssd Key="3900455" /> 
<Rssd Key="4442961" /> 
<Rssd Key="4442961" /> 
<Rssd Key="4442970" /> 
<Rssd Key="3284070"> 
    <Concept Key="1662"> 
    <Concept Key="1668"> 
</Rssd> 
</Root> 

回答

2

LINQ僅用於查詢(選擇數據集的一部分),而不用於修改數據集。在這裏,我使用它來獲取Rssd元素,我們希望添加新的Concept元素。

XDocument xDocument = ... 

XElement parentElement = (from rssdElement in xDocument.Descendants("Rssd")  // Iterates through the collection of all Rssd elements in the document 
          where rssdElement.Attribute("Key").Value == "3284070" // Filters the elements to get only those which have the correct Key attribute value 
          select rssdElement).FirstOrDefault();     // Gets the first element that satisfy the above condition (returns null if no element has been found) 

if (parentElement == null) 
    throw new InvalidDataException("No Rssd element found with the key \"3284070\""); 

XElement newConceptElement = new XElement("Concept"); // Creates a new Concept element 
newConceptElement.Add(new Attribute("Key", "1234")); // Adds an Key attribute to the element with the specified value 

parentElement.Add(newConceptElement);     // Adds the new Concept element to the Rssd element 
0
XDocument xDOC = XDocument.Load(FilePath); 
      foreach (XElement xele in xDOC.Descendants("Rssd")) 
      { 
       if (xele.Attribute("Key").Value == "3284070") 
       { 
        XElement xele1 = XElement.Parse("<Concept Key='1234' />"); 
        xele.Add(xele1); 
        //Apply a break if you wish to add only one child node else add keep on adding as per your requirement, I am adding only one node 
        break; 
       } 
      } 
      xDOC.Save(FilePath); 
相關問題