Possible to validate xml against xsd using code at runtime?

后端 未结 3 1918
一生所求
一生所求 2020-12-14 04:21

I have xml files that I read in at runtime, is is possible to validate the xml against an xsd file at runtime? using c#

3条回答
  •  难免孤独
    2020-12-14 04:39

    I GOT CODE TOO! I use this in my tests:

        public static bool IsValid(XElement element, params string[] schemas)
        {
            XmlSchemaSet xsd = new XmlSchemaSet();
            XmlReader xr = null;
            foreach (string s in schemas)
            { // eh, leak 'em. 
                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);
            if (errored)
                return false;
    
            // If this doesn't fail, there's an issue with the XSD.
            XNamespace xn = XNamespace.Get(
                          element.GetDefaultNamespace().NamespaceName);
            XElement fail = new XElement(xn + "omgwtflolj/k");
            fail.SetAttributeValue("xmlns", xn.NamespaceName);
            doc = new XDocument(fail);
            var fired = false;
            doc.Validate(xsd, (o, e) => fired = true);
            return fired;
        }
    

    This one takes in the schemas as strings (file resources within the assembly) and adds them to a schema set. I validate and if its not valid I return false.

    If the xml isn't found to be invalid, I do a negative check to make sure my schemas aren't screwed up. Its not guaranteed foolproof, but I have used this to find errors in my schemas.

提交回复
热议问题