web-dev-qa-db-ja.com

XmlNodeListをList <string>に変換する

XmlNodeListをListに変換することは可能ですか?新しいリストを宣言せずに、これの簡単な実装を探しています。

System.Xml.XmlNodeList membersIdList = xmlDoc.SelectNodes("//SqlCheckBoxList/value");
    List<string> memberNames = new List<string>();
    foreach (System.Xml.XmlNode item in membersIdList)
    {
        memberNames.Add(library.GetMemberName(int.Parse(item.InnerText)));
    }
16
Moran Monovich

はい、LINQを使用して可能です。

_var memberNames = membersIdList.Cast<XmlNode>()
                               .Select(node => node.InnerText)
                               .Select(value => int.Parse(value))
                               .Select(id => library.GetMemberName(id))
                               .ToList();
_

XmlNodeListはジェネリック_IEnumerable<T>_を実装していないため、Cast<XmlNode>()呼び出しが必要です。そのため、ジェネリック以外のIEnumerableからジェネリックコレクションに明示的に変換する必要があります。

そして、はい、必要に応じて、すべてのSelect呼び出しを1つにマージできます。

_var memberNames = membersIdList.Cast<XmlNode>()
                               .Select(x => library.GetMemberName(int.Parse(x.InnerText)))
                               .ToList();
_
33
MarcinJuraszek

LINQ to XMLを使用しないのはなぜですか?

List<string> memberNames = XDocument.Load("path")
                           .XPathSelectElements("//SqlCheckBoxList/value")
                           .Select(x => library.GetMemberName((int)x))
                           .ToList();
2
Selman Genç