c# - 用于选择下一个兄弟的 Xpath

标签 c# xml xpath

我有一段这样的 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/

相关文章:

c# - Silverlight 内阴影文本

android - 获取二进制 XML 文件行 #141 : Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference

python - 如何使用 ElementTree 注释掉 XML <Tag>

c - 解析 XML 响应

debugging - 在 IE Dev 工具中查找 xPath 类似于 Firebug 中的 $x(xPathString) 控制台功能

ruby - 使用 XPath 获取属性的 XML 属性值

c# - MediaComposition.GetThumbnailAsync() 中的内存泄漏?

c# - 可访问性不一致 : field type 'world' is less accessible than field 'frmSplashScreen

c# - 为什么 System.Math 和例如 MathNet.Numerics 基于 double?

c# - 使用 C# 抓取网页 (html)