1

これはやや些細なことですが、ここに行きます。.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);
}
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 に答える