我有这样的代码:
string result = xml.Root.Descendants("XYZ").Descendants("ABC").Descendants("MNO").Single().Value;
1)有没有更好的方法来读取价值?有些通用方法不依赖于我必须去的节点的nuber吗?
2)删除“XYZ”,“ABC”等硬编码依赖的方法是什么?
答案 0 :(得分:2)
如果您不关心父节点依赖关系,您可以直接转到后代调用中的"MNO"
。
xml.Root.Descendants("MNO")
然而,这将产生一系列MNO
后代,它们可能出现在XML结构中的任何位置。
<root>
<MNO />
<ABC>
<MNO />
</ABC>
<ABC>
<XYZ>
<MNO />
</XYZ>
</ABC>
</root>
所有MNO
元素都在序列中。
答案 1 :(得分:2)
目前还不清楚你的意思是什么,但这就是你所追求的目标吗?
public IEnumerable<XElement> PathDescendants(
this XElement element,
params XName[] names)
{
return new[] { element }.PathDescendants(names);
}
public IEnumerable<XElement> PathDescendants(
this IEnumerable<XElement> elements,
params XName[] names)
{
return names.Aggregate(elements,
(current, name) => current.Descendants(name));
}
然后你可以打电话:
string result = xml.Root.PathDescendants("XYZ", "ABC", "MNO").Single().Value;