mor*_*anu 8 html c# asp.net html-agility-pack
我在codeplex讨论中提出了这个问题,但我希望能在stackoverflow上得到更快的答案.
因此,我使用HTML Agility Pack在C#中进行HTML解析.我有以下html结构:
<body>
<p class="paragraph">text</p>
<p class="paragraph">text</p>
<p class="specific">text</p>
<p class="paragraph">text</p>
<p class="paragraph">text</p>
</body>
Run Code Online (Sandbox Code Playgroud)
而且我需要获得所有带有"段落"的p元素,这些元素存在于带有"特定"类的p元素之后.
有没有办法做到这一点?
谢谢.
在Mark的例子中使用.Class(如果不存在,替换任何适当的)
例如,在LINQPad中你可以得到5,6,7:
int[] a = { 6, 5, 6 ,7 };
a.SkipWhile(x=>x!=6).Skip(1).Dump();
Run Code Online (Sandbox Code Playgroud)
因此,根据SelectNodes类型的返回,可以:
.SelectNodes( "/p" ).SkipWhile( p => p.Class != "specific" ).Skip(1)
Run Code Online (Sandbox Code Playgroud)
要么
.SelectNodes( "/p" ).Cast<XX>().SkipWhile( p => p.Class != "specific" ).Skip(1)
Run Code Online (Sandbox Code Playgroud)
(或丑陋的版本)
.SelectNodes( "/p" ).SkipWhile( p => ((XX)p).Class != "specific" ).Skip(1)
Run Code Online (Sandbox Code Playgroud)
(或者在某些情况下 - 如果你的表达式已经适当过滤,则不会
.SelectNodes( "/p" ).OfType<XX>().SkipWhile( p => p.Class != "specific" ).Skip(1)
Run Code Online (Sandbox Code Playgroud)
编辑:我可能会创建一个扩展方法:
static class HapExtensions
{
public IEnumerable<T> SkipUntilAfter( this IEnumerable<T> sequence, Predicate<T> predicate) {
return sequence.SkipWhile( predicate).Skip(1);
}
}
Run Code Online (Sandbox Code Playgroud)
有人关心为此搜索现有技术吗?有什么好名字的建议?