Использование XmlDocument
(медленный, больший объем памяти, чтение / запись, работает так же, как везде работают XML DOM):
XmlDocument d = new XmlDocument();
d.Load(filename);
string xpath = "/PathMasks/Mask[@desc='Mask_X1']/config"
foreach (XmlElement elm in d.SelectNodes(xpath))
{
Console.WriteLine(elm.GetAttribute("id"), elm.GetAttribute("desc"));
}
Использование XPathDocument
(быстрее, меньший объем памяти, чтение и записьтолько странный API):
XPathDocument d = new XPathDocument(filename);
string xpath = "/PathMasks/Mask[@desc='Mask_X1']/config"
XPathNodeIterator iter = d.CreateNavigator().Select(xpath);
while (iter.MoveNext())
{
Console.WriteLine(iter.Current.GetAttribute("id"), iter.Current.GetAttribute("desc'));
}
Я уверен, что есть вполне веская причина, почему нет метода XPathNavigator
, который возвращает IEnumerable<XPathNavigator>
, чтобы вы могли перебирать результатызапрос XPath, как обычный человек, но я не смог его обработать.