2013-02-21 3 views
0

Je développe une application WYSIWYG spécifiquement pour l'utilisation de mon entreprise avec intégration personnalisée avec les outils existants de l'entreprise.VB.NET/C# .Net MSHTML: Impossible d'obtenir l'attribut "nom" de Outerhtml après avoir utilisé "setAttribute ('nom', valeur)" pour certains éléments

Je ne pouvais pas obtenir l'attribut "name" de certains éléments lorsque j'essayais d'obtenir la chaîne html en utilisant ".OuterHtml", en particulier l'élément INPUT tag.

Exemple de code:

`Dim inElem as windows.forms.htmlElement = hdoc.CreateElement("INPUT")` 
    `inElem.Id = "txt01"` 
    `inElem.setAttribute("name", inElem.Id)` 
    `inElem.setAttribute("type", "text")` 
    `inElem.setAttribute("placeholder","text here....")` 

    '' append the created element to html body 
    `hdoc.Body.AppendChild(inElem)` 

    --> Getting html string: 
     ** hdoc.body.getElementById("txt01").OuterHtml => "<input id=txt01 placeholder='text here....'></input>" 
    --> What I really want is: 
     ** hdoc.body.getElementById("txt01").OuterHtml => "<input id=txt01 placeholder='text here....' type='text' name='txt01'></input>" 

Oui, non seulement l'attribut name ont disparu, d'autres aussi. (par exemple TYPE) Quelqu'un pourrait m'aider à ce sujet?

tentative de solution:

For Each inputEle As Windows.Forms.HtmlElement In hdoc.Body.GetElementsByTagName("input") 
     CType(inputEle.DomElement, mshtml.IHTMLInputElement).name = inputEle.Id 
    Next 

** ** ECHEC :(

SOLUTION ULTIME:

Use HTML Agility Pack: 
    ---------------------- 
    Dim inputEle3 As HtmlAgilityPack.HtmlNode = new_wb.CreateElement("input") 
    inputEle3.Attributes.Add("id", "txt01") 
    inputEle3.Attributes.Add("name", inputEle3.Id) 
    inputEle3.Attributes.Add("type", "text") 
    inputEle3.Attributes.Add("placeholder", "text here ....") 

    RESULT: 
    ------- 
    inputEle3.OuterHtml => <input id="txt01" name="txt01" type="text" placeholder="text here ...." > 

Il travaille maintenant, à condition que j'utilise HtmlAgilityPack.dll :( Microsoft mshtml sucks! :(

+0

partager Peut-être un peu plus de code Utilisez-vous un contrôle WebBrowser –

+0

? Oui, j'utilise le contrôle de WebBrowser Codes mis à jour dans le message J'espère que c'est assez clair –

Répondre

0

C'est ce qui a fonctionné pour moi. Pardonnez-moi en utilisant dynamic datatype, je n'ai pas la bibliothèque mshtml sur mon Visual Studio pour une raison quelconque.

private void Form1_Load(object sender, EventArgs e) 
     { 
      this.webBrowser1.Navigate("about:blank"); 
      this.webBrowser1.Document.Write("<INPUT id='hell' class='blah' placeholder='text here' name='hell' type='text'></INPUT>"); 
      dynamic htmldoc = webBrowser1.Document.DomDocument as dynamic; 
      dynamic node = htmldoc.getElementById("hell") as dynamic; 
      string x = node.OuterHtml; //gets name but not type 
      string s = node.GetAttribute["type"]; //gets type 
      string name = node.GetAttribute["name"]; //gets name 
     } 

Ainsi, le outerHTML par exemple n'a pas obtenu l'attribut, mais lorsque vous appelez la méthode GetAttribute il a fait le travail. Espérons que cela aide.

+0

Ouais, je pourrais obtenir les valeurs d'attribut aussi Mais je ne veux pas que mon application boucle en profondeur dans chaque nœuds htmlelement pour obtenir le document entier html C'est une méthode réalisable mais inefficace. :( –

+0

Merci quand même! :) J'ai ce que je veux si j'utilise HtmlAg ilityPack.dll au lieu de mshtml.dll –

0

SOLUTION ULTIME:.

Use HTML Agility Pack: 
---------------------- 
Dim inputEle3 As HtmlAgilityPack.HtmlNode = new_wb.CreateElement("input") 
inputEle3.Attributes.Add("id", "txt01") 
inputEle3.Attributes.Add("name", inputEle3.Id) 
inputEle3.Attributes.Add("type", "text") 
inputEle3.Attributes.Add("placeholder", "text here ....") 

RESULT: 
------- 
inputEle3.OuterHtml => <input id="txt01" name="txt01" type="text" placeholder="text here ...." > 

Il travaille maintenant, à condition que j'utilise HtmlAgilityPack.dll :(Microsoft mshtml :(succions

Questions connexes