【问题标题】:How can I get a node from an XML document based on its attribute value and into an XElement object?如何根据属性值从 XML 文档中获取节点并将其放入 XElement 对象中?
【发布时间】:2012-11-06 22:26:43
【问题描述】:

我需要将一些 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。

谢谢。

【问题讨论】:

    标签: c# xml linq-to-xml xelement


    【解决方案1】:

    这将获得第一个具有Name 属性匹配的Data 节点OrganizationalUnits

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

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

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

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

    【讨论】:

    • 它实际上比这更进一步,并返回了 下面的
    • 第二个使用 Xpath 的例子得到了我想要的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多