gpt4 book ai didi

c# - 在单一方法中根据 XSD 验证 XML

转载 作者:可可西里 更新时间:2023-11-01 03:13:16 25 4
gpt4 key购买 nike

我需要实现一个 C# 方法,该方法需要根据外部 XSD 验证 XML 并返回一个 bool 结果,指示它是否格式正确。

public static bool IsValidXml(string xmlFilePath, string xsdFilePath);

我知道如何 validate using a callback .我想知道它是否可以在不使用回调的情况下通过单一方法完成。我需要这个纯粹是为了装饰目的:我需要验证多达几十种类型的 XML 文档,所以我想做的是像下面这样简单的东西。

if(!XmlManager.IsValidXml(
@"ProjectTypes\ProjectType17.xml",
@"Schemas\Project.xsd"))
{
throw new XmlFormatException(
string.Format(
"Xml '{0}' is invalid.",
xmlFilePath));
}

最佳答案

根据您是否要对非异常事件使用异常,我可以想到几个选项。

如果您将 null 作为验证回调委托(delegate)传递,如果 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;
}

想到的另一个选项是在不使用回调 条件的情况下突破您的限制。您可以不传递预定义的回调方法,而是传递匿名方法并使用它来设置 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;
}

关于c# - 在单一方法中根据 XSD 验证 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10025986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com