(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);
Nguồn
2015-11-10 02:57:32
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) –
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
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