#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;