【问题标题】:How to get the id's of html element of html document in c# using html agility pack?如何使用html敏捷包在c#中获取html文档的html元素的id?
【发布时间】:2014-05-14 18:12:00
【问题描述】:

我有这样的事情

<div class='mainclass subclass1' quest-id='123'> </div>
<div class='mainclass subclass2' quest-id='234'> </div>
<input quest-id='3236'> </input>
<textarea quest-id='256'> </textarea>

我想要属于所有输入和文本区域的名为subclass1subclass2quest-id 的类的所有div 的quest-d。如何在 c# 中使用 html 敏捷包?

我有这样的 c# 代码:

HtmlDocument document = new HtmlDocument();
document.LoadHtml(obj.NewPage.Content);

HtmlNode htmlRootElement = document.DocumentNode.SelectSingleNode("/html");
HtmlNode bodyElement = htmlRootElement.SelectSingleNode("body");

我不知道如何继续

【问题讨论】:

    标签: c# html-agility-pack


    【解决方案1】:

    遵循 XPath 可以从该问题中发布的示例 html 中获取所有 quest-id 值:

    //div[contains(@class, 'subclass1') or contains(@class, 'subclass2')]
    | //input[@quest-id] 
    | //textarea[@quest-id]
    

    工作示例:

    var html = @"<root><div class='mainclass subclass1' quest-id='123'> </div>
    <div class='mainclass subclass2' quest-id='234'> </div>
    <input quest-id='3236'> </input>
    <textarea quest-id='256'> </textarea></root>";
    var doc = new HtmlDocument();
    doc.LoadHtml(html);
    
    var nodes = 
        doc.DocumentNode
           .SelectNodes("//div[contains(@class, 'subclass1') or contains(@class, 'subclass2')]"
                            + " | //input[@quest-id] "
                            + " | //textarea[@quest-id]");
    foreach (var node in nodes)
    {
        Console.WriteLine(node.GetAttributeValue("quest-id", ""));
    }
    

    【讨论】:

      【解决方案2】:

      这是我编写并测试过的sn-p。

       const string sampleHTML = @"<div class='mainclass subclass1' quest-id='123'></div>
          <div class='mainclass subclass2' quest-id='234'></div>
          <input quest-id='3236'> </input>
          <textarea quest-id='256'> </textarea>";
      
      
       HtmlAgilityPack.HtmlDocument myDoc = new HtmlAgilityPack.HtmlDocument();
       myDoc.LoadHtml(sampleHTML);
       HtmlNodeCollection foundNodes = myDoc.DocumentNode.SelectNodes("/div[contains(@class, 'subclass2')]");                                                                         
       MessageBox.Show(foundNodes[0].Attributes["quest-id"].Value);
      

      当我运行 sn-p 时,我在消息框中看到值“234”。

      【讨论】:

        【解决方案3】:
         string id = div.GetAttributeValue("id", "").ToString();
         string name= div.GetAttributeValue("name", "").ToString();
        

        【讨论】:

          猜你喜欢
          • 2022-03-07
          • 2018-05-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-20
          相关资源
          最近更新 更多