C# HTML敏捷包-抓取节点后的文本
我有一些我正在用C解析的HTML# 下面是示例文本,尽管这在不同的记录中重复了大约150次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标记找到下一个
<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);
}
}
你知道你是我的英雄吗?你知道你是我的英雄吗?