Ответ 1
ИЗМЕНИТЬ, как отмечено @Gaim, моя оригинальная версия не смогла захватить терминал dt
string xml = @"
<root>
<dt>name</dt>
<dd>value</dd>
<dt>name2</dt>
<dt>name3</dt>
<dd>value3</dd>
<dt>name4</dt>
<dt>name5</dt>
<dd>value5</dd>
<dt>name6</dt>
</root>
";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
XmlNodeList nodes =
doc.SelectNodes("//dt[not(following-sibling::*[1][self::dd])]");
foreach (XmlNode node in nodes)
{
Console.WriteLine(node.OuterXml);
}
Console.ReadLine();
Вывод - это те dt
узлы, у которых нет сразу dd
:
<dt>name2</dt>
<dt>name4</dt>
<dt>name6</dt>
То, что мы здесь делаем, говорит:
//dt
Все dt
узлы, где угодно....
[not(following-sibling::*[1]
.... так, что это не тот случай, когда их первый следующий брат (что бы он ни назывался)....
[self::dd]]
... называется dd
.