首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Linq到XML找到一个属性并返回单独的属性值。

从Linq到XML找到一个属性并返回单独的属性值。
EN

Stack Overflow用户
提问于 2017-10-04 16:29:23
回答 2查看 314关注 0票数 0
代码语言:javascript
复制
<?xml version="1.0" ?>
代码语言:javascript
复制
<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文档,我很难用它来解决问题。

到目前为止,我有这个,我可以找到别名部分,但我很困惑,必须从这里开始。

代码语言:javascript
复制
 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);
                }

        }

    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-04 16:36:15

aliases是元素,而不是属性

代码语言:javascript
复制
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>元素的选定值。

代码语言:javascript
复制
foreach (var item in data)
{
    Console.WriteLine($"Name: {item.Name}, Server: {item.Server}");
}
票数 2
EN

Stack Overflow用户

发布于 2017-10-04 17:13:16

代码语言:javascript
复制
   // 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;
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46569807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档