我正在使用由嵌套级别获得报酬的人设计的XML。不同的xml文件总是如下所示:
<Car>
<Color>
<Paint>
<AnotherUselessTag>
<SomeSemanticBs>
<TheImportantData>
使用LINQ很容易得到我想要的东西:(不完全是,但你明白了)
from x in car.Descendants("x")
from y in x.Descendants("y")
from z in y.Descendants("z")
select z.WhatIWant();
我在问是否有更好的方法可以做到这一点?用Linq导航DOM的一些方法吗?
答案 0 :(得分:8)
如果您确定所有您想要的是来自TheImporantData
元素的Car
元素,并且TheImportantData
未被用作标记名称,那么: -
来自汽车中的x.Descendants(“TheImportantData”) 选择x.WhatIWant();
会这样做。
答案 1 :(得分:5)
考虑XNode
扩展方法XPathSelectElements
。在你的情况下:
var foo = from x in car.XPathSelectElements("Color/Paint/AnotherUselessTag/SomeSemanticBs/TheImportantData")
select x.WhatIWant();
与Descendants
方法不同,以这种方式使用XPath专门导航到您需要的元素 - 例如它只会查看Color
元素下的Car
元素,而只会查看Paint
元素下的Color
元素,依此类推。 (如果需要,可以使用XPath模式Descendants
模拟.//TheImportantData
方法的差别较小的行为。)