2017-10-04 57 views
0
<?xml version="1.0" ?> 

的LINQ to XML查找的屬性,並返回單獨的屬性值

<aliasSection> 
    <aliases> 
     <clear /> 
     <add 
      name="MAIN" 
      server="JAG8MTO\SQLEXPRESS" 
      database="RMain" 
      trustedConnection="false" />    
     <add 
      name="DEMO" 
      server="JAG8MTO\SQLEXPRESS" 
      database="RDemo" 
      trustedConnection="false" />    
    </aliases> 
</aliasSection> 

在上面的XML文檔,我需要尋找一個別名,然後返回服務器和數據庫屬性。

這是我第一次使用xml文檔,而且我很難把它放在頭上。

到目前爲止,我有這個,我可以找到別名部分,但我不知所措必須從這裏開始。

public void Read(string fileName) 
    { 
     XDocument doc = XDocument.Load(fileName); 

     foreach (XElement el in doc.Root.Elements()) 
     { 
      foreach (XAttribute attr in el.Attributes()) 

       if (attr.ToString() == "aliases") 
       { 
        foreach (XElement element in el.Elements()) 
         listBox1.Items.Add(element.Name + " " + element.Value); 
        foreach (XAttribute attrib in el.Attributes()) 
         listBox1.Items.Add(attrib.Value); 
       } 

     } 

    } 
+2

'aliases'的元素,而不是屬性 – Fabio

回答

1

aliases是元素,不是屬性

var document = XDocument.Load(fileName); 

var data = 
    document.Descendants("aliases") // Select all <aliases> elements 
      .SelectMany(alias => alias.Elements("add")) // select all <add> elements 
      .Select(add => new 
        { 
         Name = add.Attribute("name").Value 
         Server = add.Attribute("server").Value 
        }) 
      .ToList(); 

listBox1.Items.AddRange(data); 

data將包含所有<add>元件的選擇的值。

foreach (var item in data) 
{ 
    Console.WriteLine($"Name: {item.Name}, Server: {item.Server}"); 
} 
+0

我將如何檢查,看看什麼名字,然後返回服務器值?例如,如果name = DEMO,然後返回DEMO –

+0

@PaulWalker的服務器值,而不是僅選擇名稱,則可以選擇匿名(或預定義)類型中的所有必需值 – Fabio

+0

這正是我正在嘗試執行的操作...非常感謝你的幫助。你知道有什麼好的資源可以學習嗎? –

1
// Load the xml into XElement 
    XDocument doc = XDocument.Load("F:\\db.xml",LoadOptions.None); 

    // Search through descendants and 
    // find one with name as MAIN 
    XElement result = doc.Descendants("add") 
    .FirstOrDefault(y => y.Attribute("name") != null && 
        y.Attribute("name").Value == "MAIN"); 

    // Get the values if valid element is found 
    if(result != null) 
    { 
     string server = (result.Attribute("server") != null) ? result.Attribute("server").Value : string.Empty; 
     string database = (result.Attribute("database") != null) ? result.Attribute("database").Value : string.Empty; 
    }