Tôi muốn nhai chân của mình trước khi sử dụng cụm từ thông dụng để phân tích cú pháp và thay đổi HTML.
Sử dụng XSL hoặc DOM.
Hai nhận xét đã yêu cầu tôi làm rõ. Việc thay thế biểu thức chính quy hoạt động trong trường hợp cụ thể trong câu hỏi của OP, nhưng nói chung các biểu thức chính quy không phải là một giải pháp tốt. Cụm từ thông dụng có thể khớp với regular languages, tức là một chuỗi đầu vào có thể được máy trạng thái hữu hạn chấp nhận. HTML có thể chứa các thẻ lồng nhau ở bất kỳ độ sâu tùy ý nào, vì vậy nó không phải là ngôn ngữ thông thường.
Điều này có liên quan gì đến câu hỏi này? Sử dụng cụm từ thông dụng cho câu hỏi của OP vì nó được viết, nhưng nếu nội dung giữa các thẻ có chứa các thẻ khác thì sao? Điều gì sẽ xảy ra nếu một ký tự chữ số <
xuất hiện trong văn bản? Đã 11 tháng kể từ khi Jon Tackabury hỏi câu hỏi, và tôi đoán rằng trong thời gian đó, sự phức tạp của vấn đề của anh ta có thể tăng lên.
Cụm từ thông dụng là các công cụ tuyệt vời và tôi luôn sử dụng chúng. Nhưng việc sử dụng chúng thay cho một trình phân tích cú pháp thực sự cho đầu vào cần có một trình phân tích sẽ hoạt động chỉ trong các trường hợp rất đơn giản. Đó là thực tế không thể tránh khỏi rằng những trường hợp này phát triển vượt ra ngoài những gì biểu thức thông thường có thể xử lý. Khi điều đó xảy ra, bạn sẽ bị cám dỗ để viết một biểu thức chính quy phức tạp hơn, nhưng chúng nhanh chóng trở nên rất mất thời gian để phát triển và gỡ lỗi. Hãy sẵn sàng để giải quyết các giải pháp biểu thức chính quy khi các yêu cầu phân tích mở rộng.
XSL và DOM là hai công nghệ tiêu chuẩn được thiết kế để hoạt động với đánh dấu XML hoặc XHTML. Cả hai công nghệ đều biết cách phân tích cú pháp các tệp đánh dấu có cấu trúc, theo dõi các thẻ lồng nhau và cho phép bạn chuyển đổi các thuộc tính hoặc nội dung của thẻ.
Dưới đây là một vài bài viết về cách sử dụng XSL với C#:
Dưới đây là một vài bài viết về cách sử dụng DOM với C#:
Đây là a.NET thư viện mà hỗ trợ các hoạt động DOM và XSL về HTML:
Nguồn
2008-11-18 20:04:49
các [câu trả lời tốt nhất] (http://stackoverflow.com/a/1732454/80274) cho câu hỏi này đến nay . –