[英]Validate XML against XSD in a single method
我需要實現一個 C# 方法,該方法需要針對外部 XSD 驗證 XML,並返回一個 Boolean 結果,表明它是否格式正確。
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;
}
想到的另一個選項是在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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.