如何从Array中的HTML字符串中获取内容

时间:2013-07-05 12:02:19

标签: c# html c#-4.0 html-agility-pack

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

5 个答案:

答案 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()