2014-01-15 193 views
0

我有一個這樣的xml文檔,我需要訪問「employees」,「employee」元素,所以我試圖使用linq的XDocument類來獲取員工元素,但它總是返回空值。使用LINQ to XML訪問xml元素

示例XML:

<organization> 
    <metadata> 
    </metadata> 
    <main> 
    <otherInfo> 
    </otherInfo> 
    <employeeInfo> 
     <employees> 
     <employee> 
      <id>1</id> 
      <name>ABC</name> 
     </employee> 
     <employee> 
      <id>2</id> 
      <name>ASE</name> 
     </employee> 
     <employee> 
      <id>3</id> 
      <name>XYZ</name> 
     </employee> 
     </employees> 
    </employeeInfo> 
    </main> 
</organization> 

C#代碼:

XDocument xDoc = XDocument.Parse(xmlString); 
var allEmployees = from d in xDoc.Descendants("employeeInfo") 
       from ms in d.Elements("employees")         
       from m in ms.Elements("employee") 
       select m; 

回答

1

它種取決於你所需要的信息。您的選擇返回一個IEnumerable列表。 此代碼將打印出每個員工

string xmlString = @"<organization> 
          <metadata> 
          </metadata> 
          <main> 
          <otherInfo> 
          </otherInfo> 
          <employeeInfo> 
           <employees> 
           <employee> 
            <id>1</id> 
            <name>ABC</name> 
           </employee> 
           <employee> 
            <id>2</id> 
            <name>ASE</name> 
           </employee> 
           <employee> 
            <id>3</id> 
            <name>XYZ</name> 
           </employee> 
           </employees> 
          </employeeInfo> 
          </main> 
         </organization>"; 

     XDocument xDoc = XDocument.Parse(xmlString); 
     var allEmployees = from d in xDoc.Descendants("employeeInfo") 
      from ms in d.Elements("employees")         
      from m in ms.Elements("employee") 
      select m; 

     foreach (var emp in allEmployees) { 
      Console.WriteLine(emp); 
     } 
     Console.Read(); 
+0

其實我有根節點的xmlns在我的xml文件,我這裏沒有那麼可以指定你告訴我如何在存在可用名稱空間時訪問後代元素? – user972255

+0

你能爲我提供一個例子嗎? – Lockyc

+0

我錯過了我提供的示例xml中的名稱空間(即xmlns =「http://tempuri.org」),因此我更改了代碼以在所有元素前面添加名稱空間,現在它工作正常。 – user972255

1
XDocument xDoc = XDocument.Parse(xmlString); 
var allEmployees = (from r in xDoc.Descendants("employee") 
        select new 
        { 
         Id = r.Element("id").Value, 
         Name = r.Element("name").Value 
        }).ToList(); 

foreach (var r in allEmployees) 
{ 
    Console.WriteLine(r.Id + " " + r.Name); 
} 
1

只需使用Descendants("Employee");

XDocument xDoc = XDocument.Parse(xmlString); 
var allEmployees = xDoc.Descendants("employee").ToList();