2017-05-04 1 views
1

J'ai plus de 1 000 entrées de base de données qui contiennent des balises d'image html. Le problème est que 90% des attributs 'src' ne sont que des espaces réservés. J'ai besoin de remplacer tous ces espaces réservés par les vraies sources appropriées.Remplacement d'attributs dans une balise d'image html

Une entrée de base de données typique ressemble à ceci (la quantité d'étiquettes d'image varient d'entrée à l'entrée):

<p>A monster rushes at you!</p> 
Monster:<p><img id="d8fh4-gfkj3" src="(image_placeholder)" /></p> 
<br /> 
Treasure: <p><img id="x23zo-115a9" src="(image_placeholder)" /></p> 
Please select your action below: 
</br /> 

En utilisant les ID dans les balises d'image ci-dessus, 'd8fh4-gfkj3' & « x23zo-115a9 ', Je peux interroger une autre fonction pour obtenir les "vraies" sources pour ces images.

J'ai essayé d'utiliser HtmlAgilityPack et est venu avec cette (ci-dessous):

Dim doc As New HtmlDocument() 
    doc.LoadHtml(encounterText) 

    For Each imgTag As HtmlNode In doc.DocumentNode.SelectNodes("//img") 
     'get the ID 
     Dim imgId As HtmlAttribute = imgTag.Attributes("id") 
     Dim imageId As String = imgId.Value 

     'get the new/real path 
     Dim newPath = getMediaPath(imageId) 
     Dim imgSrc As HtmlAttribute = imgTag.Attributes("src") 

     'check to see if the <img> tag "src" attribute has a placeholder 
     If imgSrc.Value.Contains("(image_placeholder)") Then 
      'replace old image src attribute with 'src=newPath' 
     End If 
    Next 

Mais je ne peux pas comprendre comment remplacer réellement l'ancienne valeur par la nouvelle valeur.

Y a-t-il un moyen de faire cela avec le HtmlAgilityPack?

Merci!

Répondre

1

Vous devriez pouvoir simplement définir la valeur de l'attribut:

'check to see if the <img> tag "src" attribute has a placeholder 
If imgSrc.Value.Contains("(image_placeholder)") Then 
    'replace old image src attribute with 'src=newPath' 
    imgSrc.Value = newPath 
End If 

Après le remplacement, vous pouvez obtenir le code HTML mis à jour avec:

doc.DocumentNode.OuterHtml