如何将HtmlGenericControl添加到HtmlNode?

时间:2012-02-23 11:00:52

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

我被困住了, 这必须非常简单,但我不知道如何。

我有这段代码:

 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

我该怎么转换呢?

感谢您提前做出的任何回复, 查帕斯

3 个答案:

答案 0 :(得分: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实例(AFAIK)的外部HTML没有简单的方法。如果你拥有它,你可以将HTML传递给HtmlNode.CreateNode()方法来创建它。但我强烈建议不要努力做到这一点。

答案 1 :(得分:0)

尝试以下代码。你需要做一些改变。控件innerHTML格式正确,可以用作xmlNode的内部XML(

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);

希望这有帮助

答案 2 :(得分:0)

有一种方法可以从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>