我需要将一些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>
我有多个名为“Data”的节点,但我需要得到的节点,我不知道如何。只是学习如何在C#中使用XML。
谢谢。
答案 0 :(得分: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
属性的节点,则可能需要额外检查null。
请注意,您可以使用XPath获得相同的结果(这将选择根Data
节点,您可以使用Element
方法获取DataItem
节点):
var ouNode = udiXML.XPathSelectElement("//Data[@Name = 'OrganizationalUnits']");