在我们的项目中,我们有从XSD生成的类。目前,我们正在通过XSD文件路径验证针对XSD的XML。
有几个XSD,我们通过数据库中存储的数字选择正确的XSD,如下所示:
" C:/项目/ XSD /报告/ Report_的 1.7 的.xsd"
" C:/项目/ XSD /报告/ Report_的 1.8 的.xsd"
因为当它开始在这样的项目中拥有文件路径时,我会变得有点紧张。这个用例是否有最佳实践?类似于直接针对生成的C#类验证xml。我目前的代码:
private static string GetXsdPath(SchemaType aSchemaType, string aTransferRevision)
{
var lFileBeginnName = XsdStrategies.XsdService.GetXsdName(aSchemaType);
var lDirectoryName = XsdStrategies.XsdService.GetDirectoryName(aSchemaType);
string lRoot = HttpContext.Current.Server.MapPath("~");
string lFullRootPath = Path.GetFullPath(Path.Combine(lRoot, @"../"));
return string.Format(
CultureInfo.CurrentCulture, @"{0}/Reports/{1}/Report_V{2}.xsd",
lFullRootPath,
lDirectoryName,
aTransferRevision);
}
public bool IsValidXml(string aXmlContent, string aXsdFilePath, XNamespace aNamespaceName)
{
try
{
if (aNamespaceName == null)
{
this.Logger.AddLogEntry(LogLevel.Error, "Namespace is null.");
return false;
}
var lXdoc = XDocument.Parse(aXmlContent);
var lSchemas = new XmlSchemaSet();
lSchemas.Add(aNamespaceName.NamespaceName, aXsdFilePath);
// xDoc Validate throws an excption if xml not conforms xsd.
lXdoc.Validate(lSchemas, null);
}
catch (XmlSchemaValidationException lEx)
{
this.Logger.AddLogEntry(LogLevel.Error, $"The Xml is not valid against the Xsd: {lEx}");
return false;
}
catch (XmlSchemaException lEx)
{
this.Logger.AddLogEntry(LogLevel.Error, $"Therse is something wrong in the Schema-Version from Xml and Xsd: {lEx}");
return false;
}
catch (XmlException lEx)
{
this.Logger.AddLogEntry(LogLevel.Error, $"A generic Error occured durring Xml against Xsd validation: {lEx}");
return false;
}
return true;
}
答案 0 :(得分:0)
我建议你将XSD数据直接存储在数据库而不仅仅是路径中,你是非常正确的,这是一个坏主意。
例如,您可以将XSD数据存储在MS SQL Server中的NVarChar数据类型中。