我有一段这样的 HTML:
<dt>name</dt> <dd>value</dd> <dt>name2</dt> <dd>value2</dd>
我想找到所有结构不正确的地方,意思是 dt
标签后没有 dd
标签。
我试过这个:
//dt/following-sibling::dt
但这行不通。有什么建议吗?
最佳答案
EDIT 如@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]
....不是他们的第一个 sibling (不管它叫什么)...
[self::dd]]
...称为 dd
。
关于c# - 用于选择下一个兄弟的 Xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2092303/