查询linq到xml

查询linq到xml,xml,linq,linq-to-xml,Xml,Linq,Linq To Xml,我已经创建了这个xml文件。我正在尝试获取特定servername属性的所有dbistance。 对于每个dbistance信息组,我希望在列表框中添加连接的结果 像这样的默认值-DBCATALOG-USERNAME-PASSWORD-1433 请告诉我…开始讨厌林克:) 违约 DBCATALOG01 用户名 密码 1433 违约 DBCATALOG02 用户名 密码 1433 违约 DBCATALOG01 用户名 密码 1433 试试这个 var doc = XDocument.Load(n

我已经创建了这个xml文件。我正在尝试获取特定servername属性的所有dbistance。 对于每个dbistance信息组,我希望在列表框中添加连接的结果 像这样的默认值-DBCATALOG-USERNAME-PASSWORD-1433 请告诉我…开始讨厌林克:)


违约
DBCATALOG01
用户名
密码
1433
违约
DBCATALOG02
用户名
密码
1433
违约
DBCATALOG01
用户名
密码
1433
试试这个

var doc = XDocument.Load(new StringReader(xml));
var result = doc.Root
                .Descendants("dbistance")
                .Select(elem => elem.Descendants()
                                    .Select(elem2 => elem2.Value)
                                    .Aggregate((current, next) => current + " - " + next));

我将解析xml和结果格式化分为两个操作。但这里有一个问题:

XDocument xdoc = XDocument.Load(path_to_xml);
string serverName = "SRV01";
IEnumerable<string> dbInstances =
            xdoc.Descendants("server")
                .Where(s => (string)s.Attribute("servrname") == serverName)
                .Descendants("dbinstance")
                .Select(db => String.Format("{0} - {1} - {2} - {3} - {4}", 
                    (string)db.Element("istancename"),
                    (string)db.Element("catalog"),
                    (string)db.Element("username"),
                    (string)db.Element("password"),
                       (int)db.Element("port")));
解析xml(可以在单独的方法中完成,该方法将返回DbInstance对象的集合):


我还喜欢你的答案保证给出正确的元素顺序,而我的答案取决于节点的顺序。@RomanPekar稍等,调查你的答案。。看起来很有趣
XDocument xdoc = XDocument.Load(path_to_xml);
string serverName = "SRV01";
IEnumerable<string> dbInstances =
            xdoc.Descendants("server")
                .Where(s => (string)s.Attribute("servrname") == serverName)
                .Descendants("dbinstance")
                .Select(db => String.Format("{0} - {1} - {2} - {3} - {4}", 
                    (string)db.Element("istancename"),
                    (string)db.Element("catalog"),
                    (string)db.Element("username"),
                    (string)db.Element("password"),
                       (int)db.Element("port")));
public class DbInstance
{
    public string InstanceName { get; set; }
    public string Catalog { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public int Port { get; set; }

    public override ToString()
    {
        return String.Format("{0} - {1} - {2} - {3} - {4}", 
                  InstanceName, Catalog, UserName, Password, Port));
    }
}
XDocument xdoc = XDocument.Load(path_to_xml);
string serverName = "SRV01";
IEnumerable<DbInstance> dbInstances =
            xdoc.Descendants("server")
                .Where(s => (string)s.Attribute("servrname") == serverName)
                .Descendants("dbinstance")
                .Select(db => new DbInstance() {
                    InstanceName = (string)db.Element("istancename"),
                    Catalog = (string)db.Element("catalog"),
                    UserName = (string)db.Element("username"),
                    Password = (string)db.Element("password"),
                    Port = (int)db.Element("port") });
listBox.DataSource = dbInstances;