gpt4 book ai didi

c# - 使用 Html Agility Pack 在两个 HTML 标签之间获取内容

转载 作者:太空狗 更新时间:2023-10-29 23:16:51 25 4
gpt4 key购买 nike

我们在 Word 中创建了一个非常庞大的帮助文档,它被用来生成一个更加庞大和笨拙的 HTM 文档。使用 C# 和这个库,我只想在我的应用程序中的任何时候抓取和显示这个文件的一部分。部分是这样划分的:

<!--logical section starts here -->
<div>
<h1><span style='mso-spacerun:yes'></span><a name="_Toc325456104">Section A</a></h1>
</div>
<div> Lots of unnecessary markup for simple formatting... </div>
.....
<!--logical section ends here -->

<div>
<h1><span style='mso-spacerun:yes'></span><a name="_Toc325456104">Section B</a></h1>
</div>

按理来说,在一个H1标签中就有一个a,里面有section name。我想从包含 div 的外部选择所有内容,直到遇到另一个 h1 并排除该 div。

  • 每个部分名称都位于 <a> 下的 h1 标签中,该标签有多个 child (每个 child 大约 6 个)
  • 逻辑部分用评论标记
  • 实际文档中不存在这些注释

我的尝试:

var startNode = helpDocument.DocumentNode.SelectSingleNode("//h1/a[contains(., '"+sectionName+"')]");
//go up one level from the a node to the h1 element
startNode=startNode.ParentNode;

//get the start index as the index of the div containing the h1 element
int startNodeIndex = startNode.ParentNode.ChildNodes.IndexOf(startNode);

//here I am not sure how to get the endNode location.
var endNode =?;

int endNodeIndex = endNode.ParentNode.ChildNodes.IndexOf(endNode);

//select everything from the start index to the end index
var nodes = startNode.ParentNode.ChildNodes.Where((n, index) => index >= startNodeIndex && index <= endNodeIndex).Select(n => n);

正因为我找不到这方面的文档,我不知道如何从我的起始节点到达下一个 h1 元素。如有任何建议,我们将不胜感激。

最佳答案

我认为这样做就可以了,尽管它假定 H1 标签只出现在部分标题中。如果不是这种情况,您可以在后代上添加 Where 以检查它找到的任何 H1 节点上的其他过滤器。请注意,这将包括它找到的 div 的所有 sibling ,直到它到达下一个具有部分名称的 div。

private List<HtmlNode> GetSection(HtmlDocument helpDocument, string SectionName)
{
HtmlNode startNode = helpDocument.DocumentNode.Descendants("div").Where(d => d.InnerText.Equals(SectionName, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();
if (startNode == null)
return null; // section not found

List<HtmlNode> section = new List<HtmlNode>();
HtmlNode sibling = startNode.NextSibling;
while (sibling != null && sibling.Descendants("h1").Count() <= 0)
{
section.Add(sibling);
sibling = sibling.NextSibling;
}

return section;
}

关于c# - 使用 Html Agility Pack 在两个 HTML 标签之间获取内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10807461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com