从 XmlTextReader 检索流文件名

发布于 2024-10-30 13:09:51 字数 732 浏览 6 评论 0原文

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

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

This is somewhat trivial but here goes. I am passing an XmlTextReader object to a method using .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);
    }
}

If something happens to the reader I want to log where the file the XmlTextReader is reading from. Is there an easy way to get back to the stream the XmlTextReader is using? The reason it is somewhat trivial is that I could easily pass in an additional string to the method containing the file location used to create the stream, but it just seems that has to be a way using only the XmlTextReader.

Thanks!

Update, this is actually what I'm doing... Sorry for the bad example:

public void TestMethod(XmlTextReader reader)
{
        //...
        //Logic
        //...

    if(something_inside_the_XML)
    throw new Exception(FileLocation);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

琴流音 2024-11-06 13:09:51

这个怎么样?

reader.BaseUri

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

正如MSDN所述:

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

How about this?

reader.BaseUri

This should return the original Uri used when creating your XmlTextReader
object.

As the MSDN states:

The base URI tells you where these nodes came from. If there is no base URI for the nodes being returned (for example, they were parsed from an in-memory string), String.Empty is returned.

秋风の叶未落 2024-11-06 13:09:51

也许你可以使用

XmlTextReader.LineNumber
XmlTextReader.LinePosition

Maybe you could use

XmlTextReader.LineNumber
XmlTextReader.LinePosition
小ぇ时光︴ 2024-11-06 13:09:51

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

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

   }
}
catch(Exception e)
{
  //Log here
}

XmlTextReader is disposable object, why not change the method signature so that it accepts the filepath and then you can stream read it via XmlTextReader. That will make you cleanly dispose the reader if any errors and log it at the same time

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

   }
}
catch(Exception e)
{
  //Log here
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文