2012-11-06 50 views
1

我需要将某些XML注入某个节点下的预先存在的XML文件中。下面是我要创建我的XML代码:如何根据XML文档的属性值和XElement对象获取节点?

//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> 

我有多个节点,与“数据”的名字,但我需要得到的是节点,我不知道如何。只要学习如何在C#中使用XML。

谢谢。

回答

3

这将让第一Data节点与Name属性匹配OrganizationalUnits

var ouNode = udiXML 
    .Descendants("Data") 
    .Where(n => n.Attribute("Name") != null) 
    .Where(n => n.Attribute("Name").Value == "OrganizationalUnits") 
    .First(); 

如果您的文档可能包含Data节点没有Name属性,空额外的检查可能是必要的。

注意,您可以实现使用XPath相同的结果(这将选择根Data节点,您可以使用Element方法DataItem节点获取):

var ouNode = udiXML.XPathSelectElement("//Data[@Name = 'OrganizationalUnits']"); 
+0

它实际上就比远一点和返回那是在下面。 – Dbloom

+0

使用Xpath的第二个例子让我得到了我想要的。非常感谢! – Dbloom