2017-10-04 90 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; 
    }