2012-02-01 18 views
6

Sto utilizzando l'HTML Agility Pack per manipolare e modificare un documento HTML. Voglio cambiare il testo nel campo come questo:Sostituzione di un tag InnerText div con HTML Agility Pack

<div id="Div1"><b>Some text here.</b><br></div> 

Sto cercando di aggiornare il testo all'interno di questo div essere:

<div id="Div1"><b>Some other text.</b><br></div> 

ho provato a fare questo utilizzando il seguente codice , ma non sembra funzionare perché la proprietà InnerText è in sola lettura.

HtmlTextNode hNode = null; 
hNode = hDoc.DocumentNode.SelectSingleNode("//div[@id='Div1']") as HtmlTextNode; 
hNode.InnerText = "Some other text."; 
hDoc.Save("C:\FileName.html"); 

Cosa sto facendo di sbagliato qui? Come accennato in precedenza, InnerText è un campo di sola lettura, sebbene sia scritto nella documentazione che "ottiene o imposta". Esiste un metodo alternativo attraverso il quale ciò può essere fatto?

risposta

9

L'espressione è usata qui: //div[@id='Div1'] seleziona il div, che non è un HtmlTextNode, quindi la variabile hNode tiene null nel tuo esempio.

La proprietà InnerText è di sola lettura, ma HtmlTextNode ha la proprietà Text che può essere utilizzata per impostare il valore necessario. Ma prima di questo dovresti ottenere quel nodo di testo. Questo potrebbe essere fatto facilmente con questa espressione: //div[@id='Div1']//b//text():

hNode = hDoc.DocumentNode 
    .SelectSingleNode("//div[@id='Div1']//b//text()") as HtmlTextNode; 
hNode.Text = "Some other text."; 
+0

Funziona come un fascino! Grazie mille... – Vivek

Problemi correlati