3

我正在处理一些 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)

4

5 回答 5

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();
于 2013-07-05T12:17:48.463 回答
1

就像是

MatchCollection matches = Regex.Matches(HTMLString, "</ul>.*?<ul>", RegexOptions.SingleLine);
foreach (Match match in matches)
{
    String oddstring = match.ToString().Replace("</ul>","").Replace("<ul>","");
}
于 2013-07-05T12:14:04.873 回答
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);
        }
    }
}
于 2013-07-05T12:26:29.567 回答
0

敏捷包已经可以查询那些文本

var nodes = doc.DocumentNode.SelectNodes("/html[1]/body[1]/li[1]/text()")
于 2013-07-05T12:31:44.707 回答
0

使用这个 XPATH:

//body/li[1]/text()
于 2013-07-05T12:40:45.393 回答