使用 C# 通过 div 中的内容获取 div class
get div class by content inside div using C#
我需要识别包含一些文本的 div
元素的 class。
例如我有这个 HTML 页面
<html>
...
<div class='x'>
<p>this is the text I have.</p>
<p>Another part of text.</p>
</div>
...
</html>
所以我知道文本 this is the text I have. Another part of text.
我需要识别 div class 名称。有没有办法使用 C# 执行此操作?
试试这个:
string stringToSearch = "<p>this is the text I have.</p><p>Another part of text.</p>";
HtmlDocument document = new HtmlDocument();
document.LoadHtml(sb.ToString());
var classOfDiv = document.DocumentNode.Descendants("div").Select(x => new
{
ClassOfDiv = x.Attributes["class"].Value
}).Where(x => x.InnerHtml = stringToSearch);
变量 classOfDiv
现在包含所需 div
的 class
名称。
基于 diiN_ 的回答。这有点冗长,但你应该能够从中得到你需要的东西。代码依赖于HTML Agility Pack。您可以使用 nuget 获取它。
var sb = new StringBuilder();
sb.AppendFormat("<html>");
sb.AppendFormat("<div class='x'>");
sb.AppendFormat("<p>this is the text I have.</p>");
sb.AppendFormat("<p>Another part of text.</p>");
sb.AppendFormat("</div>");
sb.AppendFormat("</html>");
const string stringToSearch = "<p>this is the text I have.</p><p>Another part of text.</p>";
var document = new HtmlDocument();
document.LoadHtml(sb.ToString());
var divsWithText = document
.DocumentNode
.Descendants("div")
.Where(node => node.Descendants()
.Any(des => des.NodeType == HtmlNodeType.Text))
.ToList();
var divsWithInnerHtmlMatching =
divsWithText
.Where(div => div.InnerHtml.Equals(stringToSearch))
.ToList();
var innerHtmlAndClass =
divsWithInnerHtmlMatching
.Select(div =>
new
{
InnerHtml = div.InnerHtml,
Class = div.Attributes["class"].Value
});
foreach (var item in innerHtmlAndClass)
{
Console.WriteLine("class='{0}' innerHtml='{1}'", item.Class, item.InnerHtml);
}
我需要识别包含一些文本的 div
元素的 class。
例如我有这个 HTML 页面
<html>
...
<div class='x'>
<p>this is the text I have.</p>
<p>Another part of text.</p>
</div>
...
</html>
所以我知道文本 this is the text I have. Another part of text.
我需要识别 div class 名称。有没有办法使用 C# 执行此操作?
试试这个:
string stringToSearch = "<p>this is the text I have.</p><p>Another part of text.</p>";
HtmlDocument document = new HtmlDocument();
document.LoadHtml(sb.ToString());
var classOfDiv = document.DocumentNode.Descendants("div").Select(x => new
{
ClassOfDiv = x.Attributes["class"].Value
}).Where(x => x.InnerHtml = stringToSearch);
变量 classOfDiv
现在包含所需 div
的 class
名称。
基于 diiN_ 的回答。这有点冗长,但你应该能够从中得到你需要的东西。代码依赖于HTML Agility Pack。您可以使用 nuget 获取它。
var sb = new StringBuilder();
sb.AppendFormat("<html>");
sb.AppendFormat("<div class='x'>");
sb.AppendFormat("<p>this is the text I have.</p>");
sb.AppendFormat("<p>Another part of text.</p>");
sb.AppendFormat("</div>");
sb.AppendFormat("</html>");
const string stringToSearch = "<p>this is the text I have.</p><p>Another part of text.</p>";
var document = new HtmlDocument();
document.LoadHtml(sb.ToString());
var divsWithText = document
.DocumentNode
.Descendants("div")
.Where(node => node.Descendants()
.Any(des => des.NodeType == HtmlNodeType.Text))
.ToList();
var divsWithInnerHtmlMatching =
divsWithText
.Where(div => div.InnerHtml.Equals(stringToSearch))
.ToList();
var innerHtmlAndClass =
divsWithInnerHtmlMatching
.Select(div =>
new
{
InnerHtml = div.InnerHtml,
Class = div.Attributes["class"].Value
});
foreach (var item in innerHtmlAndClass)
{
Console.WriteLine("class='{0}' innerHtml='{1}'", item.Class, item.InnerHtml);
}