C# HTML敏捷包-抓取节点后的文本

C# HTML敏捷包-抓取节点后的文本,c#,html,html-agility-pack,C#,Html,Html Agility Pack,我有一些我正在用C解析的HTML# 下面是示例文本,尽管这在不同的记录中重复了大约150次 <strong>Title</strong>: Mr<br> <strong>First name</strong>: Fake<br> <strong>Surname</strong>: Guy<br> 我可以获取数组中的文本,但我只是在获取强结束标记后的文本时遇到了问题,直到BR标记找到下一个

我有一些我正在用C解析的HTML#

下面是示例文本,尽管这在不同的记录中重复了大约150次

<strong>Title</strong>: Mr<br>
<strong>First name</strong>: Fake<br>
<strong>Surname</strong>: Guy<br>
我可以获取数组中的文本,但我只是在获取强结束标记后的文本时遇到了问题,直到BR标记找到下一个强标记


任何帮助都将不胜感激

您可以使用XPath
下面的兄弟姐妹::text()[1]
来获取直接位于每个
strong
之后的文本节点。以下是一个最小但完整的示例:

var raw = @"<div>
<strong>Title</strong>: Mr<br>
<strong>First name</strong>: Fake<br>
<strong>Surname</strong>: Guy<br>
        </div>";
var doc = new HtmlDocument();
doc.LoadHtml(raw);
foreach(HtmlNode node in doc.DocumentNode.SelectNodes("//strong"))
{
    var val = node.SelectSingleNode("following-sibling::text()[1]");
    Console.WriteLine(node.InnerText + ", " + val.InnerText);
}

您应该能够通过执行简单的字符串操作来删除“:”,如果需要…

您可以使用XPath
下面的同级::text()[1]
来获取直接位于每个
strong
之后的文本节点。以下是一个最小但完整的示例:

var raw = @"<div>
<strong>Title</strong>: Mr<br>
<strong>First name</strong>: Fake<br>
<strong>Surname</strong>: Guy<br>
        </div>";
var doc = new HtmlDocument();
doc.LoadHtml(raw);
foreach(HtmlNode node in doc.DocumentNode.SelectNodes("//strong"))
{
    var val = node.SelectSingleNode("following-sibling::text()[1]");
    Console.WriteLine(node.InnerText + ", " + val.InnerText);
}

如果需要,您应该能够通过执行简单的字符串操作来删除“:”。

是一个常见的标记,因此您提供的示例格式有一些特定的内容

var html = @"
<div>
<strong>First name</strong><em>italic</em>: Fake<br>
<strong>Bold</strong> <a href='#'>hyperlink</a><br>.
<strong>bold</strong>
<strong>bold</strong> <br>
text
</div>

<div>
<strong>Title</strong>: Mr<BR>
<strong>First name</strong>: Fake<br>
<strong>Surname</strong>: Guy<br>
</div>";

var document = new HtmlDocument();
document.LoadHtml(html);
// 1. <strong>
var strong = document.DocumentNode.SelectNodes("//strong");
if (strong != null)
{
    foreach (var node in strong.Where(
        // 2. followed by non-empty text node
        x => x.NextSibling is HtmlTextNode
        && !string.IsNullOrEmpty(x.NextSibling.InnerText.Trim())
        // 3. followed by <br>
        && x.NextSibling.NextSibling is HtmlNode
        && x.NextSibling.NextSibling.Name.ToLower() == "br"))
    {
        Console.WriteLine("{0} {1}", node.InnerText, node.NextSibling.InnerText);
    }
}
var html=@”
名字斜体:假
粗体
粗体 粗体
文本 标题:先生
名字:假
姓氏:盖伊
"; var document=新的HtmlDocument(); document.LoadHtml(html); // 1. <强> var strong=document.DocumentNode.SelectNodes(//strong); 如果(强!=null) { foreach(strong.Where中的var节点( //2.后跟非空文本节点 x=>x.NextSibling是HtmlTextNode &&!string.IsNullOrEmpty(x.NextSibling.InnerText.Trim()) //3.后跟
&&x.NextSibling.NextSibling是HtmlNode &&x.NextSibling.NextSibling.Name.ToLower()=“br”)) { Console.WriteLine(“{0}{1}”,node.InnerText,node.NextSibling.InnerText); } }
是一个常见的标记,因此您提供的示例格式需要一些特定的标记

var html = @"
<div>
<strong>First name</strong><em>italic</em>: Fake<br>
<strong>Bold</strong> <a href='#'>hyperlink</a><br>.
<strong>bold</strong>
<strong>bold</strong> <br>
text
</div>

<div>
<strong>Title</strong>: Mr<BR>
<strong>First name</strong>: Fake<br>
<strong>Surname</strong>: Guy<br>
</div>";

var document = new HtmlDocument();
document.LoadHtml(html);
// 1. <strong>
var strong = document.DocumentNode.SelectNodes("//strong");
if (strong != null)
{
    foreach (var node in strong.Where(
        // 2. followed by non-empty text node
        x => x.NextSibling is HtmlTextNode
        && !string.IsNullOrEmpty(x.NextSibling.InnerText.Trim())
        // 3. followed by <br>
        && x.NextSibling.NextSibling is HtmlNode
        && x.NextSibling.NextSibling.Name.ToLower() == "br"))
    {
        Console.WriteLine("{0} {1}", node.InnerText, node.NextSibling.InnerText);
    }
}
var html=@”
名字斜体:假
粗体
粗体 粗体
文本 标题:先生
名字:假
姓氏:盖伊
"; var document=新的HtmlDocument(); document.LoadHtml(html); // 1. <强> var strong=document.DocumentNode.SelectNodes(//strong); 如果(强!=null) { foreach(strong.Where中的var节点( //2.后跟非空文本节点 x=>x.NextSibling是HtmlTextNode &&!string.IsNullOrEmpty(x.NextSibling.InnerText.Trim()) //3.后跟
&&x.NextSibling.NextSibling是HtmlNode &&x.NextSibling.NextSibling.Name.ToLower()=“br”)) { Console.WriteLine(“{0}{1}”,node.InnerText,node.NextSibling.InnerText); } }
你知道你是我的英雄吗?你知道你是我的英雄吗?