【问题标题】:How to get Contents from HTML string in Array如何从数组中的 HTML 字符串中获取内容
【发布时间】:2013-07-03 12:45:54
【问题描述】:

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

【问题讨论】:

  • 它们是否总是介于 和
      之间?
  • @Jonesy 是的,他们总是在 和
      之间

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


    【解决方案1】:

    使用这个 XPATH:

    //body/li[1]/text()
    

    【讨论】:

      【解决方案2】:

      Agility Pack 已经可以查询这些文本

      var nodes = doc.DocumentNode.SelectNodes("/html[1]/body[1]/li[1]/text()")
      

      【讨论】:

        【解决方案3】:

        获取所有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);
                }
            }
        }
        

        【讨论】:

          【解决方案4】:

          选择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();
          

          【讨论】:

            【解决方案5】:

            类似

            MatchCollection matches = Regex.Matches(HTMLString, "</ul>.*?<ul>", RegexOptions.SingleLine);
            foreach (Match match in matches)
            {
                String oddstring = match.ToString().Replace("</ul>","").Replace("<ul>","");
            }
            

            【讨论】:

            • OP 可能需要使用 HtmlAgilityPack 的解决方案(注意标签和问题的最后一句)
            猜你喜欢
            • 2019-11-16
            • 1970-01-01
            • 1970-01-01
            • 2014-05-02
            • 2020-06-16
            • 2011-05-31
            • 1970-01-01
            • 1970-01-01
            • 2013-03-01
            相关资源
            最近更新 更多