2013-07-25 7 views
1

Как добавить еще один концептуальный узел (Concept Key = "1234" R) к дочернему узлу Rssd, где rssd = 3284070 в C#, я использую 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); 
Смежные вопросы