如何使用.NET在内存中使用模式验证XML文件?

时间:2009-10-20 12:54:44

标签: .net xsd

是否可以使用运行时从嵌入式应用程序资源加载的XSD验证XML文件,而不是使用.NET(Framework 3.5)使用物理文件?

提前致谢

3 个答案:

答案 0 :(得分:2)

您可以使用XmlSchemaCollection.Add(string, XmlReader)

string file = "Assembly.Namespace.FileName.ext";
XmlSchemaCollection xsc = new XmlSchemaCollection();
xsc.Add(null, new XmlTextReader(
    this.GetType().Assembly.GetManifestResourceStream(file)));

答案 1 :(得分:2)

这是我的:

public static bool IsValid(XElement element, params string[] schemas)
{
    XmlSchemaSet xsd = new XmlSchemaSet();
    XmlReader xr = null;
    foreach (string s in schemas)
    { 
        xr = XmlReader.Create(new MemoryStream(Encoding.Default.GetBytes(s)));
        xsd.Add(null, xr);
    }
    XDocument doc = new XDocument(element);
    var errored = false;
    doc.Validate(xsd, (o, e) => errored = true);
    return !errored;
}

你可以通过以下方式使用它:

var xe = XElement.Parse(myXmlString); //by memory; may be wrong
var result = IsValid(xe, MyApp.Properties.Resources.MyEmbeddedXSD);

这并不保证这是100%;它只是一个很好的起点。 XSD验证不是我完全掌握的......

答案 2 :(得分:1)

查看在Winter4NET中如何完成。完整的源代码is here。基本代码摘录:

Stream GetXsdStream() {
    string name = this.GetType().Namespace + ".ComponentsConfigSchema.xsd";
    return Assembly.GetExecutingAssembly().GetManifestResourceStream( name ); 
}

...

XmlSchema schema = XmlSchema.Read( GetXsdStream(), null);
xmlDoc.Schemas.Add( schema );
xmlDoc.Validate(new ValidationEventHandler(ValidationCallBack));