用于选择下一个兄弟的Xpath
我有这样的HTML片段:
我想找到结构不正确的所有地方,这意味着在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 ) ]
他们做同样的事情