Как читать XSD с помощью XmlScheme (.NET), если ссылается через «urn»?

#c# #.net #xsd

#c# #.net #xsd

Вопрос:

У меня есть 3 файла XSD: main.xsd, bah.xsd и body.xsd. main.xsd содержит ссылки на другие XSD-файлы с такой структурой:

 lt;xs:any namespace="urn:........" processContents="strict"/gt;   

Я прочитал main.xsd. Цель состоит в том, чтобы получить такой результат, который может быть повторен для построения дерева, которое будет содержать элементы из всех 3 XSD-файлов —

 private XmlSchema ReadAndCompileSchema() {  XmlSchema result = null;  XmlSchemaSet xmlSchemaSet = new XmlSchemaSet();  using (var reader = new XmlTextReader(_thisAddIn.XsdSchemaFile))  {  result = XmlSchema.Read(reader, new ValidationEventHandler(  (e, args) =gt; throw new Exception("Can't read xml schema", args.Exception))  );  xmlSchemaSet.Add(result);  }  xmlSchemaSet.Compile();  return result; }  

К сожалению, в результате выполнения ReadAndCompileSchema() я вижу только элементы из main.xsd и не вижу никаких элементов из bah.xsd и body.xsd. Не желательно изменять файлы .XSD, может быть, есть какая-то возможность изменить коды C#, чтобы решить проблему?

  • главная страница.xsd
 lt;?xml version="1.0" encoding="UTF-8"?gt; lt;xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:head.003.001.01" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:iso:std:iso:20022:tech:xsd:head.003.001.01"gt; lt;xs:import namespace="urn:iso:std:iso:20022:tech:xsd:head.001.001.01" schemaLocation="bah.xsd"/gt;  lt;xs:element name="BizData" type="BusinessData"/gt;  lt;xs:complexType name="BusinessApplicationHeader"gt;  lt;xs:sequencegt;  lt;xs:any namespace="urn:iso:std:iso:20022:tech:xsd:head.001.001.01" processContents="strict"/gt;  lt;/xs:sequencegt;  lt;/xs:complexTypegt;  lt;xs:complexType name="StrictPayload"gt;  lt;xs:sequencegt;  lt;xs:any namespace="urn:iso:std:iso:20022:tech:xsd:DRAFT6auth.093.001.01" processContents="strict"/gt;  lt;/xs:sequencegt;  lt;/xs:complexTypegt;  lt;xs:complexType name="BusinessData"gt;  lt;xs:sequencegt;  lt;xs:element name="Hdr" type="BusinessApplicationHeader"/gt;  lt;xs:element name="Pyld" type="StrictPayload"/gt;  lt;/xs:sequencegt;  lt;/xs:complexTypegt; lt;/xs:schemagt;  
  • ба.xsd
 lt;?xml version="1.0" encoding="UTF-8"?gt; lt;xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.01" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:iso:std:iso:20022:tech:xsd:head.001.001.01"gt;  lt;xs:element name="AppHdr" type="ApplicationHeader"/gt;  lt;xs:complexType name="ApplicationHeader"gt;  lt;xs:annotationgt;  lt;xs:documentation source="Name" xml:lang="EN"gt;ApplicationHeaderlt;/xs:documentationgt;  lt;xs:documentation source="Definition" xml:lang="EN"gt;lt;/xs:documentationgt;  lt;/xs:annotationgt;  ..........  lt;/xs:complexTypegt; lt;/xs:schemagt;  
  • тело.xsd
 lt;?xml version="1.0" encoding="UTF-8"?gt; lt;xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:DRAFT6auth.093.001.01" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:iso:std:iso:20022:tech:xsd:DRAFT6auth.093.001.01" elementFormDefault="qualified"gt;  lt;xs:element name="Document" type="Document"/gt;  ..................... lt;/xs:schemagt;