#c# #.net #.net-4.0 #xmltextreader
#c# #.net #.net-4.0 #xmltextreader
Вопрос:
Это несколько тривиально, но здесь все в порядке. Я передаю объект XmlTextReader методу, использующему .Net 4.0 framework.
public void TestMethod(XmlTextReader reader)
{
try
{
//...
//Logic
//...
}
catch(Exception ex)
{
//I also want to log the file location of the XmlTextReader!
Log(ex.Message);
}
}
Если что-то случится с программой чтения, я хочу указать, из какого файла XmlTextReader выполняет чтение. Есть ли простой способ вернуться к потоку, который использует XmlTextReader? Причина, по которой это несколько тривиально, заключается в том, что я мог бы легко передать дополнительную строку методу, содержащую расположение файла, используемого для создания потока, но просто кажется, что это должен быть способ, использующий только XmlTextReader.
Спасибо!
Обновление, это на самом деле то, что я делаю… Извините за плохой пример:
public void TestMethod(XmlTextReader reader)
{
//...
//Logic
//...
if(something_inside_the_XML)
throw new Exception(FileLocation);
}
Комментарии:
1. Вы должны использовать
XmlReader
вместоXmlTextReader
. ИспользуйтеXmlReader.Create()
для его создания.
Ответ №1:
Как насчет этого?
reader.BaseUri
Это должно вернуть исходный Uri, используемый при создании вашего XmlTextReader
объект.
Как указано в MSDN:
Базовый URI сообщает вам, откуда взялись эти узлы. Если для возвращаемых узлов нет базового URI (например, они были проанализированы из строки в памяти), введите String.Возвращается значение Empty.
Ответ №2:
Возможно, вы могли бы использовать
XmlTextReader.LineNumber
XmlTextReader.LinePosition
Ответ №3:
XmlTextReader — это одноразовый объект, почему бы не изменить сигнатуру метода так, чтобы он принимал путь к файлу, а затем вы могли потоком читать его через XmlTextReader. Это позволит вам аккуратно утилизировать программу чтения в случае возникновения ошибок и одновременно регистрировать ее
try
{
using(var reader = new XmlTextReader(filepath)
{
}
}
catch(Exception e)
{
//Log here
}