我正在处理一些HTML内容。 HTML的格式如下所示。
<li>
<ul>
<li>Test1</li>
<li>Test2</li>
</ul>
Odd string 1
<ul>
<li>Test3</li>
<li>Test4</li>
</ul>
Odd string 2
<ul>
<li>Test5</li>
<li>Test6</li>
</ul>
<li>
html内容中可能有多个“奇数字符串”。所以我想要数组中的所有“奇数字符串”。有什么简单的方法吗? (我正在使用C#和HtmlAgilityPack)
答案 0 :(得分:3)
选择ul
个元素并参考下一个兄弟节点,它将是您的文字:
HtmlDocument html = new HtmlDocument();
html.Load(html_file);
var odds = from ul in html.DocumentNode.Descendants("ul")
let sibling = ul.NextSibling
where sibling != null &&
sibling.NodeType == HtmlNodeType.Text && // check if text node
!String.IsNullOrWhiteSpace(sibling.InnerHtml)
select sibling.InnerHtml.Trim();
答案 1 :(得分:1)
类似
MatchCollection matches = Regex.Matches(HTMLString, "</ul>.*?<ul>", RegexOptions.SingleLine);
foreach (Match match in matches)
{
String oddstring = match.ToString().Replace("</ul>","").Replace("<ul>","");
}
答案 2 :(得分:0)
获取所有ul
个后代,并检查下一个兄弟节点是HtmlNodeType.Text
,如果不是空的话:
List<string>oddStrings = new List<string>();
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
foreach (HtmlNode ul in doc.DocumentNode.Descendants("ul"))
{
HtmlNode nextSibling = ul.NextSibling;
if (nextSibling != null && nextSibling.NodeType == HtmlNodeType.Text)
{
string trimmedText = nextSibling.InnerText.Trim();
if (!String.IsNullOrEmpty(trimmedText))
{
oddStrings.Add(trimmedText);
}
}
}
答案 3 :(得分:0)
Agility Pack已经可以查询这些文本
var nodes = doc.DocumentNode.SelectNodes("/html[1]/body[1]/li[1]/text()")
答案 4 :(得分:0)
使用此XPATH:
//body/li[1]/text()