Có ai biết cách tôi có thể lấy số dòng hiện tại của System.Xml.XmlReader không? Tôi đang cố gắng để ghi lại nơi trong một tập tin tôi tìm thấy các yếu tố Xml.Số dòng hiện tại từ System.Xml.XmlReader (C# & .Net)
Trả lời
Tận dụng giao diện IXmlLineInfo
được hỗ trợ bởi một XmlReader
:
IXmlLineInfo xmlInfo = (IXmlLineInfo)reader;
int lineNumber = xmlInfo.LineNumber;
Mở rộng trên giao diện IXmlLineInfo
, các tài liệu hướng dẫn cho điều này là khá xấu; từ một chút đào, tôi có thể cho bạn biết những điều sau đây:
1) System.Xml.XmlReader
là trừu tượng, vì vậy bạn sẽ không bao giờ phải xử lý một trường hợp này, thực tế là nó không thực hiện IXmlLineInfo
không ồ ạt về (mặc dù, nếu nó đã làm, nó sẽ làm cho tất cả mọi thứ chỉ là một chút dễ dàng hơn :))
2) giao diện System.Xml.IXmlLineInfo
cung cấp hai tính chất: LineNumber
và LinePosition
(mà là những điều chúng ta quan tâm) , cộng với phương thức: HasLineInfo()
, theo tài liệu, sẽ cho bạn biết nếu người triển khai có thể trả về dòng thông tin.
3) Trong số những người thừa kế tài liệu của System.Xml.XmlReader
, ta có:
System.Xml.XmlDictionaryReader - abstract, used by WCF for serialization, no IXmlLineInfo
System.Xml.XmlNodeReader - used when reading a node, no IXmlLineInfo
System.Xml.XmlTextReader - used when reading a stream of data, has IXmlLineInfo
System.Xml.XmlValidatingReader - used when reading a stream of data and validating, has IXmlLineInfo.
Nhìn vào danh sách trên, các XmlDictionaryReader
sẽ được sử dụng trong nội bộ, các XmlNodeReader
sẽ được sử dụng khi bạn đã vượt qua trong một nút được đọc (mà đã được phân tích cú pháp, đã được untethered từ tài liệu nguồn của nó), XmlTextReader
và XmlValidtingReader
(cả hai đều thực hiện IXmlLineInfo
), sẽ được sử dụng khi bạn đọc từ một tài liệu. Vì vậy, dài và ngắn của nó có vẻ là nếu nó có thể hoặc hữu ích để cung cấp cho bạn thông tin vị trí, khuôn khổ sẽ làm như vậy.
Điều đó đang được nói, tài liệu dường như rất nhẹ. Vừa mới làm được điều này, tôi đã kết thúc làm (với _xr là một thực hiện cụ thể không rõ của System.Xml.XmlReader
):
string position = "(unknown)";
if (_xr != null && typeof(System.Xml.IXmlLineInfo).IsInstanceOfType(_xr) &&
((System.Xml.IXmlLineInfo)_xr).HasLineInfo())
{
System.Xml.IXmlLineInfo li = (System.Xml.IXmlLineInfo)_xr;
position = "(" + li.LineNumber.ToString() + "," + li.LinePosition.ToString() + ")";
}
Với tất cả điều đó đang được nói, khi tôi thực sự chạy đoạn mã trên, các loại _xr kết thúc lên được System.Xml.XsdValidatingReader
(chúc may mắn tìm tài liệu về điều đó!), Được kế thừa từ System.Xml.XmlReader
, nhưng không kế thừa từ System.Xml.XmlValidatingReader
hoặc System.Xml.XmlTextReader
. Như vậy, có thể là khôn ngoan khi sử dụng cách tiếp cận như trên.
- 1. số dòng hiện tại trong Lua
- 2. Tự động lấy số dòng hiện tại
- 3. .NET C# GUI ứng dụng Dòng lệnh
- 4. .NET Dòng mã Số lượt truy cập
- 5. C# .Net Bắt ngày cuối cùng của tháng trước từ ngày hiện tại
- 6. VI Cụm từ thông dụng - Thay thế bằng số dòng hiện tại
- 7. Chuyển đối số vào chương trình C từ dòng lệnh
- 8. Tôi có thể lấy các đối số dòng lệnh của các quy trình khác từ .NET/C# không?
- 9. Lấy số hàng hiện tại?
- 10. Xem gỡ lỗi Eclipse dòng hiện tại
- 11. Lấy dòng mã hiện tại trong Ruby
- 12. AcroPDFLib để mở tập tin PDF từ dòng trong WindowsForms C# .NET
- 13. Dòng nhật ký Apache xuất hiện ngoài chuỗi - tại sao?
- 14. Lấy số dòng từ preg_match_all()
- 15. Đánh dấu dòng hiện tại của RichTextBox
- 16. Cách lấy hạt giống hiện tại từ C++ rand()?
- 17. Phát hiện https từ HttpContext trong .net?
- 18. Gọi. NET/C# từ R
- 19. Intellij Dòng mới trên phím tắt dòng hiện tại
- 20. Nhận số trang hiện tại trong InDesign CS5 từ javascript
- 21. JodaTime Lấy Số Mili giây Hiện tại Từ Đầu Ngày
- 22. phân trang wordpress nhận số trang hiện tại từ url
- 23. Thực hiện SSH Server trong C# /. Net
- 24. Lấy số dòng từ nút xml - java
- 25. Số liệu LoC (dòng mã) cho các dự án .NET 2.0 C#
- 26. Đối số dòng lệnh C++ Eclipse CDT?
- 27. Kiểm tra C# Cú pháp từ Dòng lệnh
- 28. SQL Management Studio - Thực hiện dòng hiện tại
- 29. Lấy thư mục hiện tại trong ứng dụng web .NET
- 30. Làm cách nào để chọn tệp cấu hình ứng dụng .Net từ tham số dòng lệnh?
Có vẻ như thực hành không tốt. Vì XmlReader không kế thừa IXmlLineInfo nên việc triển khai lớp trừu tượng này có thể không thực hiện giao diện. Một kiểm tra hỗ trợ giao diện là cần thiết. – SerG
Vui lòng sử dụng IXmlLineInfo xmlInfo = reader dưới dạng IXmlLineInfo; Thực hành mã tốt này. @shuvra – Shuvra