我有这样的HTML片段:
<dt>name</dt> <dd>value</dd> <dt>name2</dt> <dd>value2</dd>
我想找到结构不正确的所有地方,这意味着dd标签后没有dt标签.
我试过这个:
//dt/following-sibling::dt
但这不起作用.有什么建议?
Aak*_*shM 16
编辑 @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();
Run Code Online (Sandbox Code Playgroud)
输出是那些dt没有dd紧跟其后的节点:
<dt>name2</dt>
<dt>name4</dt>
<dt>name6</dt>
Run Code Online (Sandbox Code Playgroud)
我们在这里做的是说:
//dt
Run Code Online (Sandbox Code Playgroud)
所有dt节点,任何地方....
[not(following-sibling::*[1]
Run Code Online (Sandbox Code Playgroud)
....这不是他们的第一个兄弟(无论它叫什么)的情况......
[self::dd]]
Run Code Online (Sandbox Code Playgroud)
......被称为dd.
Gai*_*aim 16
我不确定我理解你,但有我的解决方案.此XPath匹配所有<dt>未<dd>直接跟随的ALL .所以有测试结构
<xml>
<dt>name</dt> <!-- match -->
<dt>name2</dt>
<dd>value2</dd>
<dt>name</dt>
<dd>value</dd>
<dt>name2</dt> <!-- match -->
</xml>
Run Code Online (Sandbox Code Playgroud)
有XPath
//dt[ name( following-sibling::*[1] ) != 'dd' ]
Run Code Online (Sandbox Code Playgroud)
要么
//dt[ not( following-sibling::*[1]/self::dd ) ]
Run Code Online (Sandbox Code Playgroud)
他们做同样的事情
| 归档时间: |
|
| 查看次数: |
31061 次 |
| 最近记录: |