2017-02-15 10 views
0

XML文字列がありますが、このxmlをシリアル化しているときに 'XML文書(498,31)にエラーがあります。'というエラーが表示されます。この特定のノードに問題があることをユーザーに送信できるように、C#のこの位置にxmlノードを追加します。与えられた行番号でXMLノードを取得する方法

ここでキャッチのように、私がメッセージを持って「XMLドキュメント(498、31)に誤りがあり」
using (TextReader reader = new StringReader(xml)) 
{ 
    try 
    { 
     tempClass = (T)new XmlSerializer(typeof(T)).Deserialize(reader); 
    } 
    catch (InvalidOperationException ex) 
    { 
     //Here we need to show the node in which the error occurred 
    } 
} 

。私は、ノード 『「この特に』、ユーザーにカスタムエラーメッセージをスローするようにしたいです問題があります。 ' 件名に関する助力やアイディアがあれば幸いです。

+6

私はこのためのメモ帳を++使用しますが、私はそれはあなたが関連するコードとxmlファイルの可能性の一部としてだけでなく、正確なエラーを表示することができればそれは非常に参考になる:) – slawekwin

+0

を求めているものではありませんだと思いますメッセージ –

+2

その位置に「xml」ノードは存在しないかもしれません。それが問題です。それは、有効なxmlではないものにぶつかります。 –

答えて

4

XML関数を使用することはできません(ファイルが有効なXMLでないため)、テキストとして読み取って、ユーザーに違反行を送ります。

string[] xmlLines = File.ReadAllLines(path);  
int linesFrom = 5; 
int exceptionLine = 10; //Your line number 
int startLine = exceptionLine - linesFrom - 1 > 0 ? exceptionLine - linesFrom - 1: 0; 
int endLine = exceptionLine + linesFrom - 1 > xmlLines.Count - 1 ? exceptionLine + linesFrom - 1: xmlLines.Count - 1; 
StringBuilder sb = new StringBuilder(); 
for (int i = startLine ; i < endLine ; i++) 
{ 
    sb.Append(xmlLines[i]); 
} 
return sb.ToString(); 
+2

周囲の線を含むこともあります。十分な文脈を持つために497-5まで497 + 5。 –

+0

例外には行番号が明示的に含まれているか、テキストから解析する必要がありますか?もしそうなら、異なる言語の場合はどうしますか? – slawekwin

+0

@Anuja Webサーバーからファイルを読み込む追加の要件がありますか?もしそうなら、それを別の質問として尋ねる。このサイトでは、各質問を最小限の具体的な質問として尋ねるべきです。 – Zesty

関連する問題