XMLを外部XSDに対して検証し、整形式であるかどうかを示すブール結果を返す必要があるC#メソッドを実装する必要があります。
public static bool IsValidXml(string xmlFilePath, string xsdFilePath);
コールバックを使用して 検証する方法を知っています 。コールバックを使用せずに単一のメソッドで実行できるかどうかを知りたいです。これは純粋に美容目的で必要です。最大で数十種類のXMLドキュメントを検証する必要があるため、以下のように簡単に作成できます。
if(!XmlManager.IsValidXml(
@"ProjectTypes\ProjectType17.xml",
@"Schemas\Project.xsd"))
{
throw new XmlFormatException(
string.Format(
"Xml '{0}' is invalid.",
xmlFilePath));
}
非例外的なイベントに例外を使用するかどうかに応じて、いくつかのオプションを検討できます。
検証コールバックデリゲートとしてnullを渡すと、XMLの形式が正しくない場合、ほとんどの組み込み検証メソッドが例外をスローするため、単に例外をキャッチしてtrue
/false
状況に応じて。
public static bool IsValidXml(string xmlFilePath, string xsdFilePath, XNamespace namespaceName)
{
var xdoc = XDocument.Load(xmlFilePath);
var schemas = new XmlSchemaSet();
schemas.Add(namespaceName, xsdFilePath);
try
{
xdoc.Validate(schemas, null);
}
catch (XmlSchemaValidationException)
{
return false;
}
return true;
}
頭に浮かぶもう1つのオプションは、without using a callback
基準。事前定義されたコールバックメソッドを渡す代わりに、匿名メソッドを渡し、それを使用してtrue
/false
戻り値を設定できます。
public static bool IsValidXml(string xmlFilePath, string xsdFilePath, XNamespace namespaceName)
{
var xdoc = XDocument.Load(xmlFilePath);
var schemas = new XmlSchemaSet();
schemas.Add(namespaceName, xsdFilePath);
Boolean result = true;
xdoc.Validate(schemas, (sender, e) =>
{
result = false;
});
return result;
}