Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HTML敏捷包-选择特定节点后的节点_C#_Asp.net_Html_Html Agility Pack - Fatal编程技术网

C# HTML敏捷包-选择特定节点后的节点

C# HTML敏捷包-选择特定节点后的节点,c#,asp.net,html,html-agility-pack,C#,Asp.net,Html,Html Agility Pack,我问了这个问题,但我希望在stackoverflow得到更快的答案 因此,我使用HTML敏捷包在C中进行HTML解析。 我有以下html结构: <body> <p class="paragraph">text</p> <p class="paragraph">text</p> <p class="specific">text</p> <p class="paragraph">t

我问了这个问题,但我希望在stackoverflow得到更快的答案

因此,我使用HTML敏捷包在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>
我需要得到所有的p元素和类段落,它们都存在于p元素和类特定的元素之后

有办法吗

谢谢。

试试这个

bool latterDayParagraphs = false;
List<DocumentNode> nodes = new List<DocumentNode>();
foreach(var pElement in doc.DocumentNode.SelectNodes("/p"))
{
   if(pElement.Class != "paragraph") 
   {
      latterDayParagraphs = true;
      continue;
   }
   if(latterDayParagraphs)
   {
      nodes.Add(pElement);
   }
}

使用Mark示例中的.Class,如果不存在,则替换任何适当的

使用

e、 g.从以下方面获得5,6,7:

因此,根据SelectNodes返回的类型,可以:

.SelectNodes( "/p" ).SkipWhile( p => p.Class != "specific" ).Skip(1)

或者在某些情况下,如果您的表达式已经进行了适当的过滤,则不会

.SelectNodes( "/p" ).OfType<XX>().SkipWhile( p => p.Class != "specific" ).Skip(1)
编辑:我可能会创建一个扩展方法:

static class HapExtensions
{
    public IEnumerable<T> SkipUntilAfter( this IEnumerable<T> sequence, Predicate<T> predicate) {
        return sequence.SkipWhile( predicate).Skip(1);
       }
}

有人愿意为这个搜索现有技术吗?有什么好名字的建议吗?

我想你只是看了一下问题,没有真正读过我使用HTML Agility Pack在C中解析HTML,只需要选择class=paragration的p标记,它们位于class=specific的p标记之后。对此表示抱歉,希望这个答案更有用。您需要对System.Linq的引用:这将选择具有段落类的所有p标记。我只需要class=specific的p标记后面的那些。很抱歉,现在时间还早,希望能有所帮助,很难想出更优雅的方式。没问题,伙计,我感谢你的帮助。这个解决方案在我脑海中闪过,但我仍然希望我不必使用它。也许会出现一个更优雅的。如果没有,我会给你打分。这正是我需要的。谢谢
.SelectNodes( "/p" ).SkipWhile( p => ((XX)p).Class != "specific" ).Skip(1)
.SelectNodes( "/p" ).OfType<XX>().SkipWhile( p => p.Class != "specific" ).Skip(1)
static class HapExtensions
{
    public IEnumerable<T> SkipUntilAfter( this IEnumerable<T> sequence, Predicate<T> predicate) {
        return sequence.SkipWhile( predicate).Skip(1);
       }
}