1

这有点微不足道,但在这里。我将 XmlTextReader 对象传递给使用 .Net 4.0 框架的方法。

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);
}
4

3 回答 3

3

这个怎么样?

reader.BaseUri

这应该返回创建 XmlTextReader 对象时使用的原始 Uri。

正如MSDN所述:

基本 URI 告诉您这些节点来自哪里。如果返回的节点没有基本 URI(例如,它们是从内存中的字符串解析的),则返回 String.Empty。

于 2011-04-06T14:12:08.937 回答
0

XmlTextReader 是一次性对象,为什么不更改方法签名以便它接受文件路径,然后您可以通过 XmlTextReader 流式读取它。如果有任何错误,这将使您干净地处理阅读器并同时记录它

try
{
   using(var reader = new XmlTextReader(filepath) 
   {

   }
}
catch(Exception e)
{
  //Log here
}
于 2011-04-06T14:09:31.150 回答
0

也许你可以使用

XmlTextReader.LineNumber
XmlTextReader.LinePosition
于 2011-04-06T14:05:05.830 回答