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>

「データ」という名前のノードが複数ありますが、そのノードを取得する必要があり、方法がわかりません。C# で XML を使用する方法を学習しています。

ありがとうございました。

4

1 に答える 1

3

これにより、属性がOrganizationalUnitsに一致する最初のDataノードが取得されます。Name

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 に答える