Walidacja XML przez XSD a zewnętrze zasoby

0

Cześć

Dokonujemy walidacji plików XML przy pomocy schemy XSD. Pliki XSD mają odniesienia do zew. zasobów ze stron ministerstwa np. http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2020/03/11/eD/DefinicjeTypy/

<?xml version="1.0" encoding="UTF-8"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2021/06/08/eD/DefinicjeTypy/" xmlns:tns="http://crd.gov.pl/wzor/2021/12/27/11148/" targetNamespace="http://crd.gov.pl/wzor/2021/12/27/11148/" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0" xml:lang="pl">
	<xsd:import namespace="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2021/06/08/eD/DefinicjeTypy/" schemaLocation="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2021/06/08/eD/DefinicjeTypy/StrukturyDanych_v8-0E.xsd"/>

Od kilku dni dostęp do tych zasobów został ograniczony dla adresów spoza Polski.
Szukamy rozwiązania sieciowego ale także ew. opcji w kodzie jak uniknąć błędu walidacji w takim przypadku. Fragment kodu poniżej.

Czy ktoś przerabiał taki przypadek?

                string err = "";
                XmlDocument xml = new XmlDocument();
                xml.Load(Request.Files[upload].InputStream);
             
                xml.Schemas.Add(null, Server.MapPath("~/App_Data/schemat.xsd"));

                try
                {
                    xml.Validate(null);
                }
                catch (System.Xml.Schema.XmlSchemaValidationException e)
                {
                    err = e.Message;
                }

0

Nie opieraj się na schemach sciągniętych ze stron ministerstwa, bo uzależniasz się od tego jak działaja zewnętrzny dostawca o czym się przekonałeś na własnej skórze. Zrób kopię i umieść scheme gdzieś w projekcie, ewentualnie użyj jakiegoś blob storage jak AWS S3

Co do sprawdzania to ChatGPT podpowiada takie coś

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

namespace XmlValidation
{
    class Program
    {
        static void Main(string[] args)
        {
            string xmlString = "<?xml version='1.0'?><root><element>hello</element></root>";
            string schemaPath = @"C:\schema.xsd";

            // Load the XML string into a XmlDocument
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(xmlString);

            // Load the XML schema from the file system
            XmlSchemaSet schemaSet = new XmlSchemaSet();
            schemaSet.Add(null, schemaPath);

            // Validate the XML document against the schema
            xmlDoc.Schemas = schemaSet;
            xmlDoc.Validate((sender, e) =>
            {
                Console.WriteLine("Validation Error: " + e.Message);
            });

            Console.WriteLine("XML document is valid");
        }
    }
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.