2016-06-28 91 views
1

我試圖從XML文件中取出特定的員工ID,以便查找員工關聯的某些組,然後將這些組作爲元素添加到XML中。如何使用Linq to XML獲取XML屬性值?

首先,我需要employeeId,然後我可以查找一些信息,但我不瞭解如何獲取它。我猜我沒有得到它,因爲所有的嵌套節點。

這裏是XML結構。

<CXIXML> 
    <Directives> 
    <Updates> 
     <Emp tasEmpID="00123" lName="Doe" fName="John" empStatus="A" city="HDQ" /> 
     <Emp tasEmpID="00456" lName="Smith" fName="Jane" empStatus="A" city="HDQ" /> 
    </Updates> 
    </Directives> 
</CXIXML> 

這是我試過但我沒有得到的ID。

private static void SetGroupAssociations(string xmlFile) 
     { 
      XElement xelement = XElement.Load(xmlFile); 
      IEnumerable<XElement> employees = xelement.Elements(); 
      foreach (var employee in employees) 
      { 
       var employeeId = from e in employee.Descendants("Emp") 
           select new 
           { 
            Id = e.Element("tasEmpID") 
           }; 

       Console.WriteLine(employeeId); 
      } 
     } 

最終我需要最終得到類似下面的內容。因此,關於如何在特定員工節點之後添加新元素的任何建議都會很好,但首先我至少要讓員工查看他們的團隊。

<CXIXML> 
    <Directives> 
    <Updates> 
     <Emp tasEmpID="00123" lName="Doe" fName="John" empStatus="A" city="HDQ" /> 
     <Group groupId="1"> 
     <Group groupId="5"> 
     <Group groupId="12"> 
     <Emp tasEmpID="00456" lName="Smith" fName="Jane" empStatus="A" city="HDQ" /> 
     <Group groupId="1"> 
    </Updates> 
    </Directives> 
</CXIXML> 
+1

您是否發佈了相關的xml數據?你的C#代碼嘗試從「sharpID」元素中獲取值,但是在你的XML中沒有這樣的屬性。 –

+0

已編輯。有幾個屬性具有相同的值。我修剪了一些屬性以減少發佈的代碼。 – Caverman

+0

看看我寫給你的答案。 –

回答

1

這看起來與您已有的相似。然後在foreach中,您可以將句子添加到您的流程中。

var document = XDocument.Load(xmlFile); 
var employees = document.Descendants("Emp"); 
foreach (var employee in employees) 
{ 
    var employeeId = employee.Attribute("tasEmpID").Value; 
    Console.WriteLine(employeeId); 
} 

我已經把文件中單獨的變量,這樣你就可以使用這個對象來保存更改。

+0

謝謝,這工作。 – Caverman

1

我想你的xml結構是不正確的,你描述的小組將在每個Emp內部,所以我將假設這一點。

要獲取的屬性的員工,你可以做到以下幾點:

XElement xelement = XElement.Load(xmlFile); 
var emp=xelement.Descendants("Emp") 
       .FirstOrDefault(e=>(string)e.Attribute("tasEmpID")=="00456"); 

我們組添加到當前的員工,只要使用Add方法:

emp.Add(groups.Select(g=>new XElement("Group",new XAttribute("groupId",g.Id)))); 

這是假設groups變量是IEnumerable<Group>

+0

我標記derloopkat作爲答案,因爲它做了我在問的問題,但是,最終我可能不得不使用這種變化,因爲我可能不得不改變我解決這個問題的方式。我可能必須使用員工列表,根據屬性找到他們的節點,然後添加組節點。 – Caverman

+0

我可能不得不改變一切,包括回到XmlDocument而不是Linq到XML。由於需要進行一些條件檢查,我最初使用Linq to XML來寫出員工,然後加載文件以查看組。使用XmlDocument,我可以單獨寫出每個節點。它可以用Linq to XML來完成,但是我沒有找到任何東西,我必須在今天完成。 – Caverman

+0

我沒有看到你發現使用Linq2XML添加元素的問題。它非常簡單。如果您喜歡在當前問題中添加一個新問題,請讓我知道該查看一下 – octavioccl