【发布时间】:2015-10-23 07:26:18
【问题描述】:
在this问题中我发现了如何使用
XDocument MyData = XDocument.Load(FILENAME);
string color = MyData.Descendants("Red").Elements("Shade")
.Where(y => (int)y.Attribute("id") == 3).FirstOrDefault().Value;
通过指定属性“id”来获取元素。上面从下面的 Xml 返回“熔岩”。
<colours>
<Red>
<Shade id="1">
<colour>crimson</colour>
</Shade>
<Shade id="2">
<colour>raspberry</colour>
</Shade>
<Shade id="3">
<colour>lava</colour>
</Shade>
<Shade id="4">
<colour>scarlet</colour>
</Shade>
</Red>
<Green>
<Shade id="1">
<colour>asparagus</colour>
</Shade>
<Shade id="2">
<colour>emerald</colour>
</Shade>
<Shade id="3">
<colour>lime</colour>
</Shade>
<Shade id="4">
<colour>avocado</colour>
</Shade>
</Green>
<Blue>
<Shade id="1">
<colour>cyan</colour>
</Shade>
<Shade id="2">
<colour>sapphire</colour>
</Shade>
<Shade id="3">
<colour>powder</colour>
</Shade>
<Shade id="4">
<colour>iris</colour>
</Shade>
</Blue>
</colours>
在下面的示例中,我的 Shade 元素有一个名为“组”的额外属性(为了保持简短,我只是将它们添加到“红色”中。我需要做一些与上一个类似的事情,只是这次我不想搜索“id”并返回其“颜色”,而是搜索“id”并返回其“组”值。
一种解决方案是将“组”从属性更改为元素,这使得将 Linq 适应上面的 Xml 更加简单,但我很想看看现有 Xml 的解决方案会是什么样子。
我也渴望了解更多有关 Linq to Xml 和使用此类 Lambda 表达式的信息。您可以指出我的任何好的学习资源都将非常感激。
<colours>
<Red>
<Shade id="1" group="yes">
<colour>crimson</colour>
</Shade>
<Shade id="2" group="no">
<colour>raspberry</colour>
</Shade>
<Shade id="3" group="yes">
<colour>lava</colour>
</Shade>
<Shade id="4" group="no">
<colour>scarlet</colour>
</Shade>
</Red>
<Green>
<Shade id="1">
<colour>asparagus</colour>
</Shade>
<Shade id="2">
<colour>emerald</colour>
</Shade>
<Shade id="3">
<colour>lime</colour>
</Shade>
<Shade id="4">
<colour>avocado</colour>
</Shade>
</Green>
<Blue>
<Shade id="1">
<colour>cyan</colour>
</Shade>
<Shade id="2">
<colour>sapphire</colour>
</Shade>
<Shade id="3">
<colour>powder</colour>
</Shade>
<Shade id="4">
<colour>iris</colour>
</Shade>
</Blue>
</colours>
【问题讨论】: