1

我需要在某个节点下将一些 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。

谢谢你。

4

1 回答 1

3

这将获得属性匹配的第一个Data节点OrganizationalUnitsName

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

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

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

var ouNode = udiXML.XPathSelectElement("//Data[@Name = 'OrganizationalUnits']");
于 2012-11-06T22:32:33.883 回答