我有一个 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>
我希望能够在给定模型名称和颜色的情况下提取所有属性及其值
e.g.
给定 ModelY 和 White,我想得到 configCode="1" stConfigCode= "xx" dgConfigCode="hj"
这可以是任何结构 - 数组、列表等
我一直在使用 Linq to 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();
有人知道怎么做吗?
乐意使用任何方法,不一定非得是 Linq
Update
总结为一个方法:
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;
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)