在ASP.Net中上载引用XSD的XML文件

更新时间:2024-05-04 下载TXT文档 下载Word文档

我有一个XML文件,该文件通过常规文件上传控件上传到ASP.Net页。 当它启动时,我正在尝试验证XML和反序列化XML。 但是,下面的代码对于验证这样引用XSD的XML文件确实非常方便:

xsi:schemaLocation="someurl ..\localSchemaPath.xsd"

但是,如果我上载此XML文件,则仅上载XML文件,因此.. localSchemaPath.xsd不存在,因此无法验证。

即使我将XSD存储在本地,它也不是很正确,因为XML文件可以用如下所示的模式位置编写:

xsi:schemaLocation="someurl ..\localSchemaPath.xsd"

要么
xsi:schemaLocation =" someurl localSchemaPath.xsd"
要么
xsi:schemaLocation =" someurl .................. localSchemaPath.xsd"
如果愿意的话。

困境! {短码网-DuanMa.NET}

(出于这个问题的目的,我从以下代码中夹了一些代码:针对C#中引用的XSD验证XML)

using System.Xml;
using System.Xml.Schema;
using System.IO;

public class ValidXSD
{
    public static void Main()
    {
        // Set the validation settings.
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.ValidationType = ValidationType.Schema;
        settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
        settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
        settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
        settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);

        // Create the XmlReader object.
        XmlReader reader = XmlReader.Create("inlineSchema.xml", settings);

        // Parse the file. 
        while (reader.Read()) ;
    }

    // Display any warnings or errors.
    private static void ValidationCallBack(object sender, ValidationEventArgs args)
    {
        if (args.Severity == XmlSeverityType.Warning)
            Console.WriteLine("\tWarning: Matching schema not found.  No validation occurred." + args.Message);
        else
            Console.WriteLine("\tValidation error:" + args.Message);
    }
}

这是我用来通过本地模式验证xml的代码块:

string errors = string.Empty;

try
{
    XmlSchemaSet schemas = new XmlSchemaSet();
    schemas.Add(string.Empty, Page.MapPath("~/xml/Schema.xsd"));
    XmlDocument doc = new XmlDocument();
    doc.Schemas = schemas;
    doc.Load(Page.MapPath("~/xml/sampleXML.xml"));
    //use this line instead of the one above for a string in memory.
    //doc.InnerXml = xmlToValidate;  
    ValidationEventHandler validator = delegate(object send, ValidationEventArgs ve)
                                           {
                                               errors +="
" + ve.Severity +":" + ve.Message;
                                           };

    doc.Validate(validator);
}
catch (XmlException xe)
{
    errors +="
" + xe.Message;
}
catch (XmlSchemaValidationException xe)
{
    errors +="
" + xe.Message;
}

我无法完全确定您是要尝试一种通用的-反对任何引用的模式,还是每次都要针对特定的模式进行验证,并且不确定如何处理这些引用。

如果是后者,则将模式在Internet上公开,并告诉人们通过URI引用它。

如果是前者,那么我建议以下几点:

  • 首先,用户上传XML文件。
  • 解析XML文件以获取架构参考。 告诉他们"找到对yourSchema.xsd的引用;请在下面上传此文件",并带有一个新的上传框。
  • 然后,针对上载的架构验证文件。 为此,请修改您的settings对象的Schemas属性,而不是修改ValidationFlags属性。

以上就是短码网小编为大家整理的《在ASP.Net中上载引用XSD的XML文件》相关内容,希望大家喜欢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若内容造成侵权/违法违规/事实不符,请将联系本站反馈,一经查实,立即处理!

在ASP.Net中上载引用XSD的XML文件》文档下载仅供参考学习,下载后请在24小时内删除。

转载注明出处:https://www.duanma.net/article/c474cc39003.html

回到顶部