はじめに
初めまして、エンジニア歴1年目で最近C#を触り始めたものです。
早速ですが、1週間ほど悩んで解決できないことがあるので質問させていただきます。
使用環境及び言語
Microsoft Visual Studio 2019でC#を使用しております。
実現したいこと
実現したいこととしましては下記になります。
1.xsdによるxmlの検証(これはおそらくできている)
2.エラーが出た場合、エラーメッセージをArrayList型に設定し、返却値として渡す(すべてのエラーを設定したい)
現在の状況
xsdによってxmlを検証し、コンソールにエラーメッセージを出すところまでは調べれば出てきたのですが、
・複数のエラーが起きた時に最初のエラーのみが表示される点
・実際にはコンソールに表示するのではなく、エラーメッセージをArrayList型に設定し返却値とする点
以上の二点が現在実装できていない状況です。
以下、現在のソースコードです。(xmlファイル、xsdファイルについては適当なものをローカルに保存し、ファイルパスを渡しています)
private ArrayList xmlCheck(string xmlFilePath, string xsdFilePath)
{
//xsdファイルパスから型変換
XmlTextReader reader = new XmlTextReader(xsdFilePath);
XmlSchema xmlschema = XmlSchema.Read(reader, ValidationCallback);
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add(xmlschema);
// XMLファイルとXSDファイルを設定する。
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Schemas.Add(schemaSet);
xmlDocument.Load(xmlFilePath);
try{
//スキーマチェック
xmlDocument.Validate(ValidationEventHandler);
//仮の返却値
return null;
//xsd等の規約に対する例外?(そもそも必要?)
}catch(XmlSchemaValidationException ex)
{
//エラーあり(true)を返却
return ex;
}
}
private void ValidationCallback(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Console.WriteLine("Error:" + e.Message);
break;
case XmlSeverityType.Warning:
Console.WriteLine("Warning:" + e.Message);
break;
}
}
private void ValidationEventHandler(object sender, ValidationEventArgs e)
{
switch(e.Severity)
{
case XmlSeverityType.Error:
//errorInfoList.Add(e.Message);
Console.WriteLine("Error:" + e.Message);
break;
case XmlSeverityType.Warning:
Console.WriteLine("Warning:" + e.Message);
break;
}
}
終わりに
以上が私の質問になります。解答だけでなく分かりにくい点や、もっと情報が欲しい場合等も対応したいと思うので、そういった指摘でもございましたら是非よろしくお願いします。
2020/07/01追記 上記解決しました コード自体は問題なくイベントハンドラの理解不足でListに格納する度に初期化してました