Как добавить HtmlGenericControl в HtmlNode? - PullRequest
1 голос
/ 23 февраля 2012

Я застрял, это должно быть очень просто сделать, но я не вижу, как.

У меня есть этот код:

 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 ]

1 голос
/ 24 февраля 2012

Почему бы просто не создать узел, используя 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);

Нет простого способа получить внешний HTML-код экземпляра HtmlGenericControl (AFAIK). Если он у вас есть, вы можете просто передать HTML в метод HtmlNode.CreateNode(), чтобы создать его. Но я настоятельно рекомендую не пытаться заставить это работать.

0 голосов
/ 13 марта 2012

Ну, есть способ получить ваш OuterHtml из HtmlGenericControl:

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>
0 голосов
/ 23 февраля 2012

Попробуйте код ниже. вам нужно будет внести некоторые изменения. элементы управления innerHTML хорошо сформированы и могут использоваться как innerXML для xmlNode

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

Надеюсь, это поможет

...