Ger*_*orm 16 c# xml validation schema xsd
我需要实现一个C#方法,它需要针对外部XSD验证XML并返回一个布尔结果,指示它是否格式正确.
public static bool IsValidXml(string xmlFilePath, string xsdFilePath);
Run Code Online (Sandbox Code Playgroud)
我知道如何使用回调进行验证.我想知道是否可以在单个方法中完成,而不使用回调.我需要这个纯粹用于美容目的:我需要验证多达几十种类型的XML文档,所以我想做的就像下面这样简单.
if(!XmlManager.IsValidXml(
@"ProjectTypes\ProjectType17.xml",
@"Schemas\Project.xsd"))
{
throw new XmlFormatException(
string.Format(
"Xml '{0}' is invalid.",
xmlFilePath));
}
Run Code Online (Sandbox Code Playgroud)
psu*_*003 39
我可以考虑几种选择,具体取决于您是否要对非异常事件使用异常.
如果传递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;
}
Run Code Online (Sandbox Code Playgroud)
想到的另一个选择会推动您的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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36296 次 |
| 最近记录: |