1

How do I add another concept node (Concept Key="1234"R) to the child Rssd node where rssd = 3284070 in C#, I'm using XElements to contruct all the XML. Do I need a linq statement?

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

2 回答 2

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
于 2013-07-25T02:09:23.980 回答
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);
于 2013-07-25T06:14:07.647 回答