DÜZENLEME, benim orijinal versiyonu hemen onları takip eden bir dd
yok 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();
Çıktı olanlar dt
düğümleri olan bir terminali yakalamak için başarısız oldu:
<dt>name2</dt>
<dt>name4</dt>
<dt>name6</dt>
Burada ne yapıyoruz diyor:
//dt
0 o
değil ilk şu kardeş (her ne denir) durum öyle ki her yerde
Tüm dt
düğümler ....
[not(following-sibling::*[1]
.... ....
[self::dd]]
... dd
olarak adlandırılır.
1 - XPath ifadesi aşağı erimiş olabilir '// dt [aşağıdaki kardeşler :: * [1] [self :: dt]]' – Tomalak
@Tomalak XPath'ınız tüm vakalarla eşleşmiyor, cevabıma bakın, sadece ilk atch. – Gaim
@Gaim: Haklısınız. '' Değil() 'yaklaşımı doğru olanıdır, '