2012-02-01 48 views
6

Tôi đang sử dụng Gói Agility HTML để thao tác và chỉnh sửa tài liệu HTML. Tôi muốn thay đổi nội dung trong lĩnh vực này như thế này:Thay thế thẻ HTML div InnerText bằng cách sử dụng HTML Agility Pack

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

Tôi đang tìm kiếm để cập nhật các văn bản trong phạm vi này div là:

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

tôi đã cố gắng làm điều này bằng cách sử dụng đoạn mã sau , nhưng nó dường như không hoạt động vì thuộc tính InnerText là chỉ đọc.

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

Tôi đang làm gì sai ở đây? Như đã đề cập ở trên, InnerText là một trường chỉ đọc, mặc dù nó được viết trong tài liệu mà nó "được hoặc đặt". Có phương pháp thay thế nào qua đó có thể thực hiện được không?

Trả lời

9

Khái niệm được sử dụng ở đây: //div[@id='Div1'] chọn div, mà không phải là một HtmlTextNode, vì vậy biến hNode giữ null trong ví dụ của bạn.

Thuộc tính InnerText thực sự chỉ đọc, nhưng HtmlTextNode có thuộc tính Text có thể được sử dụng để đặt giá trị cần thiết. Nhưng trước đó bạn sẽ nhận được nút văn bản đó. Điều này có thể dễ dàng thực hiện với cụm từ này: //div[@id='Div1']//b//text():

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

Hoạt động như một sự quyến rũ! Cám ơn rất nhiều... – Vivek

Các vấn đề liên quan