2014-07-06 2 views
1

Je suis un peu perplexe sur celui-ci. J'ai un code HTML qui contient une image, suivi d'un texte. Mais j'ai besoin de réorganiser le html pour que l'image arrive en premier - donc image, puis balise h3, puis le texte.Comment extraire une image du HTML et passer devant la balise d'en-tête?

EDIT: La morue ne supprime pas réellement ci-dessous l'attribut de style. Je pensais que ça fonctionnait jusqu'à ce que je regarde de plus près la source html. Donc, j'ai besoin d'aide avec stripping l'attribut style donné

<p> 
<img alt="" src="../../../../images/PeterDoocy5.jpg" style="width: 608px; height: 316px;" /></p> 

Jusqu'à présent, je suis parvenu à utiliser le PAH pour dépouiller les attributs de style des images dans la page en utilisant:

<Extension()> Public Function RemoveStyleAttributes(input As String) 
     Dim cleint As New WebClient 

     Dim html As New HtmlDocument 
     html.LoadHtml(input) 

     Dim elementsWithStyleAttribute = html.DocumentNode.SelectNodes("//@img") 

     If elementsWithStyleAttribute IsNot Nothing Then 
      For Each element In elementsWithStyleAttribute 
       element.Attributes("style").Remove() 
      Next 
     End If 
     Return input 
    End Function 

Mais je suis à une perte quant à la façon dont puis tirez mettre l'image et mettre en face de l'étiquette H3.

HTML:

<div class="col-md-6"> 
    <div class="item"> 
     <div class="content galleryItem"> 
     <h3> 
      DOJ court docs in Abu Khattallah case dispel Obama Admin narrative about the anti-Islam video        
     </h3> 
     <p> 
      <img alt="" class="img-responsive" src="../../../../images/AbuKhattala.jpg" /> 
     </p> 
     <p> 
      But it was an awful, disgusting video..... 
     </p> 
     </div> 
    </div> 
</div> 

La méthode d'extension maintenant:

<Extension()> Public Function RemoveStyleAttributes(html As HtmlDocument) 


     Dim divs = html.DocumentNode.SelectNodes("//div[@class='content galleryItem']") 

     For Each div As HtmlNode In divs 
      'get <img> and remove its style attribute' 
      Dim img = div.SelectSingleNode("./p/img[@style]") 
      img.Attributes("style").Remove() 
      'remove <h3> and <p>text here</p>' 
      Dim h3 = div.SelectSingleNode("./h3") 
      h3.Remove() 
      Dim text = div.SelectSingleNode("./p[not(img)]") 
      text.Remove() 
      'add <h3> and <p>text here</p> to the parent again in desired order' 
      div.AppendChild(h3) 
      div.AppendChild(text) 
     Next 


     Return html.DocumentNode.OuterHtml.ToString 
    End Function 

Toute tentative de l'utiliser comme @ Html.Raw (item.PostSummary.RemoveStyleAttributes)

Répondre

0

Vous pouvez essayer cette façon :

<Extension()> Public Function RemoveStyleAttributes(input As String) 
    Dim cleint As New WebClient 
    Dim html As New HtmlDocument 
    html.LoadHtml(input) 

    For Each div As HtmlNode In divs 
     'get <img> and remove its style attribute' 
     Dim img = div.SelectSingleNode("./p/img[@style]") 
     img.Attributes("style").Remove() 
     'remove <h3> and <p>text here</p>' 
     Dim h3 = div.SelectSingleNode("./h3") 
     h3.Remove() 
     Dim text = div.SelectSingleNode("./p[not(img)]") 
     text.Remove() 
     'add <h3> and <p>text here</p> to the parent again in desired order' 
     div.AppendChild(h3) 
     div.AppendChild(text) 
    Next 
    Return html.DocumentNode.OuterHtml.ToString 
End Function 

sortie (formaté. html d'entrée donnée telle que publiée dans cette question) :

<div class="col-md-6"> 
    <div class="item"> 
     <div class="content galleryItem"> 
     <p> 
      <img alt="" class="img-responsive" src="../../../../images/AbuKhatta 
       la.jpg"> 
     </p> 
     <h3> 
      DOJ court docs in Abu Khattallah case dispel Obama Admin narrative a 
      bout the anti-Islam video 
     </h3> 
     <p> 
      But it was an awful, disgusting video..... 
     </p> 
     </div> 
    </div> 
</div> 
+0

je l'ai essayé comme méthode d'extension et se référence d'objet non définie à une instance d'un objet. J'ai mon avis j'ai essayé @ Html.Raw (item.PostSummary.RemoveStyleAttributes) mais cela n'a pas fonctionné. Qu'est-ce qui me manque en ce qui concerne l'utilisation comme une méthode d'extension? –

+0

Votre méthode d'extension aurait dû retourné 'html.DocumentNode.OuterElement', au lieu de' l'état brut input' brut ... – har07

+0

Si je reviens html.documentnode.outerhtml il ne semble pas comme une méthode d'extension via IntelliSense. J'ai posté le code dans ma réponse originale pour la méthode d'extension. –

Questions connexes