2011-04-12 25 views

Trả lời

8

Chỉ có tùy chọn khác mà tôi biết là XDocument.Load(), có quá tải chấp nhận LoadOptions.SetLineInfo. Điều này sẽ được tiêu thụ theo cách tương tự như một XmlDocument.

Example

+0

Hiện tại, mạng này rất tuyệt nhưng tiếc là tôi vẫn đang viết cho .net 2.0 từ thập niên 80. (Tôi đã đề cập đến trong câu hỏi nhưng tôi không muốn cập nhật bài đăng) –

+0

Tôi nghĩ rằng có thể là trường hợp. Giữa hai người còn lại, tôi nghĩ tôi thích phương pháp 'XPathDocument' hơn. – dahlbyk

+3

Gắn bó với phương pháp XmlDocument và xem mã này dưới dạng trình bao bọc: https://github.com/icsharpcode/SharpDevelop/blob/master/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/PositionXmlDocument.cs – Andy

5

(Mở rộng câu trả lời từ @ bình luận của Andy)

Không có được xây dựng theo cách để làm điều này bằng XmlDocument (nếu bạn đang sử dụng XDocument, bạn có thể sử dụng quá tải XDocument.Load() mà chấp nhận LoadOptions.SetLineInfo - xem this question).

Trong khi không có cách nào tích hợp, bạn có thể sử dụng lớp PositionXmlDocument wrapper từ đây (từ dự án SharpDevelop):

https://github.com/icsharpcode/WpfDesigner/blob/5a994b0ff55b9e8f5c41c4573a4e970406ed2fcd/WpfDesign.XamlDom/Project/PositionXmlDocument.cs

Để sử dụng nó, bạn sẽ cần phải sử dụng Load quá tải chấp nhận số XmlReader (các trường hợp quá tải Load khác sẽ chuyển đến lớp XmlDocument thông thường sẽ không cung cấp cho bạn thông tin về số dòng). Nếu bạn đang sử dụng sự quá tải XmlDocument.Load chấp nhận một tên tập tin, bạn sẽ cần phải thay đổi mã của bạn như sau:

using (var reader = new XmlTextReader(filename)) 
{ 
    var doc = new PositionXmlDocument(); 
    doc.Load(reader); 
} 

Bây giờ, bạn sẽ có thể bỏ bất kỳ XmlNode từ tài liệu này cho một người PositionXmlElement để lấy số dòng và cột:

var node = doc.ChildNodes[1]; 
var elem = (PositionXmlElement) node; 
Console.WriteLine("Line: {0}, Position: {1}", elem.LineNumber, elem.LinePosition); 
+0

Điều này thực sự tốt cho việc thêm retrospectivley - Tôi đã viết rất nhiều mã dựa trên XmlDocument, và đơn giản bằng cách thêm tệp này và sau đó thêm 3 dòng mã đề xuất tôi có thể có phản hồi người dùng vị trí hữu ích:) ... bạn cần để thêm 'bằng cách sử dụng ICSharpCode.WpfDesign.XamlDom;' - đó có thể là hiển nhiên rõ ràng đối với người dùng C#, nhưng tôi mới dùng C#: o ... +1! –

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