【问题标题】:How to add HtmlGenericControl to a HtmlNode?如何将 HtmlGenericControl 添加到 HtmlNode?
【发布时间】:2012-03-14 01:45:57
【问题描述】:

我被困住了, 这一定很容易完成,但我不知道如何。

我有这个代码:

 var divEl = doc.DocumentNode.SelectSingleNode("//div[@id='" + field.Id + "']");

 var newdiv = new HtmlGenericControl("div");
 newdiv.Attributes.Add("id", label.ID);
 newdiv.Attributes.Add("text", label.Text);
 newdiv.Attributes.Add("class", label.CssClass);

我需要做这样的事情:

    divEl.AppendChild(newdiv); //not working its expecting a HtmlNode, not a HtmlGenericControl

如何转换?

感谢您提前回复, 小伙子

【问题讨论】:

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


    【解决方案1】:

    为什么不直接使用 HAP 的 API 创建节点呢?它的工作方式应该非常相似。

    var newDiv = HtmlNode.CreateNode("<div/>");
    newDiv.Attributes.Add("id", label.ID);
    newDiv.Attributes.Add("text", label.Text);
    newDiv.Attributes.Add("class", label.CssClass);
    
    divEl.AppendChild(newDiv);
    

    没有简单的方法来获取HtmlGenericControl 实例的外部 HTML (AFAIK)。如果你有它,你可以将 HTML 传递给 HtmlNode.CreateNode() 方法来创建它。但我强烈建议不要尝试这样做。

    【讨论】:

      【解决方案2】:

      试试下面的代码。您将需要进行一些更改。控件 innerHTML 格式良好,可用作 xmlNode 的 innerXML

      XmlDocument doc = new XmlDocument();
      //Load your xml here TODO
      var divEl = doc.DocumentElement.SelectSingleNode("//div[@id='test']"); //Change your xpath here TODO
      var newdiv = new HtmlGenericControl("div"); 
      newdiv.Attributes.Add("id", "id"); 
      newdiv.Attributes.Add("text", "text"); 
      newdiv.Attributes.Add("class", "class");
      
      XmlNode newNode = doc.CreateNode("NodeType", "NodeName", "URI/if/any"); //update your variables here
      newNode.InnerXml = newdiv.InnerHtml;
      divEl.AppendChild(newNode);
      

      希望对你有帮助

      【讨论】:

        【解决方案3】:

        有一种方法可以从 HtmlGenericControl 获取 OuterHtml:

        using (TextWriter textWriter = new StringWriter())
        {
            using (HtmlTextWriter htmlWriter = new HtmlTextWriter(textWriter))
            {
                HtmlGenericControl control = new HtmlGenericControl("div");
        
                control.Attributes.Add("One", "1");
                control.Attributes.Add("Two", "2");
                control.InnerText = "Testing 123";
        
                control.RenderControl(htmlWriter);
            }
        }
        

        textWriter.ToString() 会让你关注:

        <div One="1" Two="2">Testing 123</div>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-03
          • 1970-01-01
          • 1970-01-01
          • 2012-06-13
          • 2016-09-19
          • 2012-05-04
          • 1970-01-01
          • 2019-08-04
          相关资源
          最近更新 更多