用于选择下一个兄弟的Xpath

我有这样的HTML片段:

 
名称
NAME2
值2

我想找到结构不正确的所有地方,这意味着在dt标签之后没有dd标签。

我试过这个:

 // DT /以下同胞:: DT

但这不起作用。 有什么建议?

编辑 @Gaim指出,我的原始版本无法捕获终端dt

 string xml = @"  
name
value
name2
name3
value3
name4
name5
value5
name6
"; 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();

输出是紧跟在它们后面没有dd那些dt节点:

 
name2
name4
name6

我们在这里做的是说:

 //dt 

所有dt节点,任何地方….

 [not(following-sibling::*[1] 

….这不是他们的第一个兄弟( 管它叫什么)的情况……

 [self::dd]] 

……被称为dd

我不确定我是否理解你,但有我的解决方案。 此XPath匹配所有

,它们不会直接跟随

。 所以有测试结构

  
name
name2
value2
name
value
name2

有XPath

 //dt[ name( following-sibling::*[1] ) != 'dd' ] 

要么

 //dt[ not( following-sibling::*[1]/self::dd ) ] 

他们做同样的事情