【问题标题】:Get list element when HTML ParsingHTML解析时获取列表元素
【发布时间】:2017-03-30 13:01:27
【问题描述】:

我有一段这样的 HTML:

<li class="myclass">
            <ul class="myclass2">
                <li><span>Name1</span><span>Value1</span></li><li><span>Name2</span><span>Value2</span></li><li><span>Name3</span><span>Value3</span></li>
            </ul>
        </li>

我正在尝试使用 HTML Agility Pack 像这样解析这个 HTML:

var values = mydetails.DocumentNode.QuerySelector(".myclass").QuerySelector("ul").InnerHtml;

这给了我这个部分:

<li><span>Name1</span><span>Value1</span></li><li><span>Name2</span><span>Value2</span></li><li><span>Name3</span><span>Value3</span></li>

但我不知道如何更进一步,我需要名称和值,但我不知道如何获得它们。你能告诉我一个方法吗?谢谢。

【问题讨论】:

    标签: c# html html-parsing html-agility-pack html-parser


    【解决方案1】:

    你应该给你的项目一个 html-id,然后在 javascript 中获取这个元素应该很容易。我不知道你的框架,但在其他人中这很容易,例如在 jQuery 中:$("#id")

    【讨论】:

    • 那些项目没有id,我不能给他们id。
    • 有没有办法在没有 id 的情况下做到这一点?
    • 你可以试试getChild()。如果你在 ul 上使用这个函数,它会给你一个数组。第一项将是....QuerySelector("ul").getChild[0]...
    【解决方案2】:

    您可以使用正则表达式从所有标签中获取值

    public void ProcessSpans(string inputHTML)
    {
        string pattern = @"<span([^>]*)class=\""(\w+)\""([^>]*)>(.*)<\/span>";
        RegexOptions regexOptions = RegexOptions.Multiline;
        Regex regex = new Regex(pattern, regexOptions);
        var matches = regex.Matches(inputHTML);
        //Process the matches with your logic. 
    }
    

    然后这样调用方法

    var values = mydetails.DocumentNode.QuerySelector(".myclass").QuerySelector("ul").InnerHtml;
    ProcessSpans(values);
    

    【讨论】:

      猜你喜欢
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      相关资源
      最近更新 更多