簡體   English   中英

在單一方法中針對 XSD 驗證 XML

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM