我有一个看起来像这样的xml映射文件
<colourMappings>
<model name="modelX">
<mapping colour="White" configCode="1"></mapping>
<mapping colour="Aluminium" configCode="2"></mapping>
<mapping colour="Black" configCode="3"></mapping>
<mapping colour="Blue" configCode="4"></mapping>
<mapping colour="White Pearl" configCode="5"></mapping>
<mapping colour="Graphite" configCode="6"></mapping>
<mapping colour="Gunmetal" configCode="7"></mapping>
<mapping colour="Indigo" configCode="8"></mapping>
<mapping colour="Red" configCode="9"></mapping>
</model>
<model name="modelY">
<mapping colour="White" configCode="1" stConfigCode= "xx" dgConfigCode="hj"></mapping>
<mapping colour="Aluminium" configCode="2" stConfigCode= "xy" dgConfigCode="gh"></mapping>
<mapping colour="Black" configCode="3" stConfigCode= "xt" dgConfigCode="fg"></mapping>
<mapping colour="Blue" configCode="4" stConfigCode= "sd" dgConfigCode="fg"></mapping>
<mapping colour="White Pearl" configCode="5" stConfigCode= "df" dgConfigCode="df"></mapping>
<mapping colour="Graphite" configCode="6" stConfigCode= "xc" dgConfigCode="df"></mapping>
<mapping colour="Gunmetal" configCode="7" stConfigCode= "cv" dgConfigCode="cv"></mapping>
<mapping colour="Indigo" configCode="8" stConfigCode= "zx" dgConfigCode="vb"></mapping>
<mapping colour="Red" configCode="9" stConfigCode= "fg" dgConfigCode="cv"></mapping>
</model>
</colourMappings>
Run Code Online (Sandbox Code Playgroud)
我希望能够在给定模型名称和颜色的情况下提取所有属性及其值
例如
给定ModelY和White,我想得到configCode ="1"stConfigCode ="xx"dgConfigCode ="hj"这可以是任何结构 - 数组,列表,等等
我一直在使用Linq到XML但无法获得正确的语法
XDocument mappings = XDocument.Load(@"D:\colour_mappings.xml");
var q = from c in mappings.Descendants("model")
where (string)c.Attribute("name") == "modelY" && (string)c.Descendants("mapping").Attributes("colour").FirstOrDefault() == "White"
select c.Attributes();
Run Code Online (Sandbox Code Playgroud)
有人知道怎么做吗?
很高兴使用任何方法,不一定需要Linq
更新
总结一种方法:
public IEnumerable<XAttribute> GetAttributes(string modelName, string colour)
{
XDocument mappings = XDocument.Load(@"D:\colour_mappings.xml");
var q1 =
from elm in mappings.Descendants("model")
where (string)elm.Attribute("name") == "modelY"
select elm;
var q2 =
from elm in q1.Descendants("mapping")
where (string)elm.Attribute("colour") == "White"
select elm.Attributes().Where(a => a.Name != "colour");
foreach (IEnumerable<XAttribute> attributeList in q2)
{
foreach (XAttribute attribute in attributeList)
{
yield return attribute;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11541 次 |
| 最近记录: |