从 XmlTextReader 检索流文件名

本文关键字:文件名 检索 XmlTextReader | 更新日期: 2023-09-27 17:48:54

这有点微不足道,但在这里。 我正在将 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);
}

从 XmlTextReader 检索流文件名

这个怎么样?

reader.BaseUri

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

正如 MSDN 所述:

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

也许你可以使用

XmlTextReader.LineNumber
XmlTextReader.LinePosition

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

try
{
   using(var reader = new XmlTextReader(filepath) 
   {
   }
}
catch(Exception e)
{
  //Log here
}