C# 如何根据属性值从XML文档中获取节点并将其放入XElement对象中?

C# 如何根据属性值从XML文档中获取节点并将其放入XElement对象中?,c#,xml,linq-to-xml,xelement,C#,Xml,Linq To Xml,Xelement,我需要将一些XML注入到某个节点下预先存在的XML文件中。以下是创建XML所需的代码: //Define the nodes XElement dataItemNode = new XElement("DataItem"); XElement setterNodeDisplayName = new XElement("Setter"); XElement setterNodeOU = new XElement("Setter"); //Create the tree with the node

我需要将一些XML注入到某个节点下预先存在的XML文件中。以下是创建XML所需的代码:

//Define the nodes
XElement dataItemNode = new XElement("DataItem");
XElement setterNodeDisplayName = new XElement("Setter");
XElement setterNodeOU = new XElement("Setter");

//Create the tree with the nodes
dataItemNode.Add(setterNodeDisplayName);
dataItemNode.Add(setterNodeOU);

//Define the attributes
XAttribute nameAttrib = new XAttribute("Name", "OrganizationalUnits");
XAttribute displayNameAttrib = new XAttribute("Property", "DisplayName");
XAttribute ouAttrib = new XAttribute("Property", "OU");

//Attach the attributes to the nodes
setterNodeDisplayName.Add(displayNameAttrib);
setterNodeOU.Add(ouAttrib);

//Set the values for each node
setterNodeDisplayName.SetValue("TESTING DISPLAY NAME");
setterNodeOU.SetValue("OU=funky-butt,OU=super,OU=duper,OU=TMI,DC=rompa-room,DC=pbs,DC=com");
以下是我到目前为止加载XML文档并尝试获取插入XML所需的节点的代码:

//Load up the UDI Wizard XML file
XDocument udiXML = XDocument.Load("UDIWizard_Config.xml");

//Get the node that I need to append to and then append my XML to it
XElement ouNode = THIS IS WHAT I DONT KNOW HOW TO DO
ouNode.Add(dataItemNode);
以下是我试图使用的现有文档中的XML:

<Data Name="OrganizationalUnits">
        <DataItem>
          <Setter Property="DisplayName">TESTING DISPLAY NAME</Setter>
          <Setter Property="OU">OU=funky-butt,OU=super,OU=duper,OU=TMI,DC=rompa-room,DC=pbs,DC=com</Setter>
        </DataItem>

测试显示名称
OU=funky butt,OU=super,OU=duper,OU=TMI,DC=rompa房间,DC=pbs,DC=com
我有多个名为“Data”的节点,但我需要获取节点,我不知道如何获取。只是学习如何将XML与C#结合使用


谢谢。

这将获得第一个
数据
节点,该节点具有
名称
属性匹配组织单元:

如果您的文档可能包含没有
名称
属性的
数据
节点,则可能需要额外检查null

注意,您可以使用XPath获得相同的结果(这将选择root
Data
node,您可以使用方法获得
DataItem
node):


实际上,它比这个稍微深入了一点,并返回了位于下面的。第二个使用Xpath的示例得到了我想要的。非常感谢!
var ouNode = udiXML
    .Descendants("Data")
    .Where(n => n.Attribute("Name") != null)
    .Where(n => n.Attribute("Name").Value == "OrganizationalUnits")
    .First();
var ouNode = udiXML.XPathSelectElement("//Data[@Name = 'OrganizationalUnits']");