Tôi đang viết một máy chủ mạng trong C# .NET 4.0. Có một kết nối mạng TCP/IP qua đó tôi có thể nhận được các phần tử XML hoàn chỉnh. Họ đến thường xuyên và tôi cần phải xử lý chúng ngay lập tức. Mỗi phần tử XML là một tài liệu XML hoàn chỉnh trong chính nó, vì vậy nó có một phần tử mở, một số nút con và một phần tử đóng. Không có yếu tố gốc đơn nào cho toàn bộ luồng. Vì vậy, khi tôi mở kết nối, những gì tôi nhận được là như thế này:Đọc toàn bộ các phần tử từ luồng mạng XML
<status>
<x>123</x>
<y>456</y>
</status>
Sau đó, một thời gian sau nó tiếp tục:
<status>
<x>234</x>
<y>567</y>
</status>
Và vân vân. Tôi cần một cách để đọc chuỗi XML hoàn chỉnh cho đến khi một phần tử trạng thái hoàn tất. Tôi không muốn làm điều đó với các phương thức đọc văn bản thuần túy vì tôi không biết định dạng dữ liệu đến. Tôi không thể đợi cho đến khi toàn bộ luồng được hoàn thành, như thường được mô tả ở nơi khác. Tôi đã thử sử dụng lớp XmlReader nhưng tài liệu của nó là lạ, các phương thức không hoạt động, phần tử đầu tiên bị mất và sau khi gửi phần tử thứ hai, XmlException xảy ra vì có hai phần tử gốc.
Tôi nghi ngờ XmlReader là con đường để đi, vì nó mong đợi một phần tử gốc và nó không được thiết lập để liên tục phát các phần tử XML. Thông thường khi xử lý các kết nối dựa trên socket, bạn sẽ nghe kết nối và tìm kiếm để xác định đầu và cuối của từng đoạn dữ liệu.Tôi biết bạn nói rằng bạn không muốn, nhưng tôi hy vọng rằng bạn sẽ phải sử dụng phương pháp đọc văn bản thuần túy để ít nhất là xác định một đoạn XML mà bạn có thể phân tích cú pháp. –
bạn cần khởi tạo trình đọc mới mỗi thư, trong đó thư là một nút hoàn chỉnh. –