<X version="1.0">
<Y id="abc" abv="a"/>
<Y id="edf" abv="e"/>
</X>
Idが「abc」であるノードを選択し、そのabv「a」を返します。
XmlDocument doc = new XmlDocument();
doc.Load(filePath);
XmlNodeList list = doc.SelectNodes("X/Y");
var node = list.Cast<XmlNode>().Where(node => node["id"].InnerText == "abc")
.Select(x=>x["abv"].InnerText);
ただし、それは機能しません。node["id"]。InnerTextは常に ""です。どこが問題なのか指摘できますか?
どうもありがとう
ノードのInnerText
は、<node>
と</node>
の間に表示されるテキストです。したがって、たとえば<Y attributes />
の場合、内部テキストはありません。
node => node.Attributes["id"].Value == "abc"
を使用する必要があります
一意でないnode
変数(最初はlinqクエリの外側、2番目は "where"メソッドラムダ)のためにコードスニペットがコンパイルされないという事実とは別に、クエリでAttributes
も見逃しました。
それは次のようなものでなければなりません
_var node = list.Cast<XmlNode>()
.Where(n => n.Attributes["id"].InnerText == "abc")
.Select(x => x.Attributes["abv"].InnerText);
_
次のように、XmlNodeListをListにキャストするだけです。
List<XmlNode> list = new List<XmlNode>();
foreach(XmlNode a in xmlNodeList)
{
list.Add(a);
}
list.OrderBy((element) => element.ChildNodes[0].InnerText);