Как добавить xmlElement из одного файла xsd в xmlElement другого файла xsd с помощью XmlSampleGenerator? - PullRequest
0 голосов
/ 17 июня 2020

Я использую XmlSampleGenerator для создания файла xml из xsd. Я могу сгенерировать файл xml из одного файла xsd напрямую, используя приведенный ниже код.

using (var stream = new MemoryStream(File.ReadAllBytes("platform-container.xsd")))
        {
            var schema = XmlSchema.Read(XmlReader.Create(stream), null);
            var gen = new XmlSampleGenerator(schema, new XmlQualifiedName("Document"));
            gen.WriteXml(XmlWriter.Create(@"C:\SCIP\SCIP-Phase-1\SCIPAppPrj\XmlFiles\dossier.i6d"));
            Console.WriteLine("Autogenerated file is here : C:\\SCIP\\SCIP-Phase-1\\SCIPAppPrj\\XmlFiles\\dossier.i6d");
        }

Но я столкнулся с проблемой, когда мне нужно объединить элементы из нескольких файлов xsd и сгенерировать один одиночный xml файл. Например, мой сгенерированный xml должен выглядеть следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<i6c:Document xmlns:i6c="http://iuclid6.echa.europa.eu/namespaces/platform-container/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://iuclid6.echa.europa.eu/namespaces/platform-container/v1 container.xsd">
   <i6c:PlatformMetadata xmlns:i6m="http://iuclid6.echa.europa.eu/namespaces/platform-metadata/v1" xsi:schemaLocation="http://iuclid6.echa.europa.eu/namespaces/platform-container/v1 container.xsd">
     <i6m:iuclidVersion>1.0</i6m:iuclidVersion>
     <i6m:documentKey>ABC</i6m:documentKey>
     <i6m:documentType>DOSSIER</i6m:documentType>
  </i6c:PlatformMetadata>
  <i6c:Content>
     <DOSSIER.SCIP xmlns="http://iuclid6.echa.europa.eu/namespaces/DOSSIER-SCIP/1.0" xmlns:i6="http://iuclid6.echa.europa.eu/namespaces/platform-fields/v1" />
  </i6c:Content>
</i6c:Document>

У меня есть основной xsd с именем container.xsd, у которого есть скелет для моего файла xml. Также metaData.xsd и content.xsd, которые содержат элементы, которые должны быть включены в качестве дочерних в один из элементов, присутствующих в container.xsd.

container.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://iuclid6.echa.europa.eu/namespaces/platform-container/v1"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://iuclid6.echa.europa.eu/namespaces/platform-container/v1"
elementFormDefault="qualified" attributeFormDefault="qualified">
<xs:element name="Document">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="PlatformMetadata">
                <xs:complexType>
                    <xs:sequence maxOccurs="unbounded">
                        <xs:any namespace="##other" processContents="lax" minOccurs="0"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="Content">
                <xs:complexType>
                    <xs:sequence>
                        <xs:any namespace="##other" processContents="strict" minOccurs="0"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

metaData.xsd

<xs:schema xmlns="http://iuclid6.echa.europa.eu/namespaces/platform-metadata/v1"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://iuclid6.echa.europa.eu/namespaces/platform-metadata/v1"
elementFormDefault="qualified" attributeFormDefault="qualified">
<xs:element name="iuclidVersion" type="xs:string">
</xs:element>
<xs:element name="documentKey" type="xs:string">
</xs:element>
<xs:element name="documentType" type="xs:string">
</xs:element>
</xs:schema>

content.xsd

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://iuclid6.echa.europa.eu/namespaces/DOSSIER-SCIP/1.0" xmlns:ct="http://iuclid6.echa.europa.eu/namespaces/scip/v1" xmlns:i6="http://iuclid6.echa.europa.eu/namespaces/platform-fields/v1" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://iuclid6.echa.europa.eu/namespaces/DOSSIER-SCIP/1.0">
<xs:import namespace="http://iuclid6.echa.europa.eu/namespaces/platform-fields/v1" schemaLocation="platform-fields.xsd"/>
<xs:import namespace="http://iuclid6.echa.europa.eu/namespaces/scip/v1" schemaLocation="commonTypesScipV1.xsd"/>
<xs:element name="DOSSIER.SCIP">
    <xs:complexType>
        <xs:sequence>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="remarks" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

Кто-нибудь может подсказать мне, как с этим справиться с помощью XmlSampleGenerator? Как читать элементы из нескольких файлов xsd и создавать один файл xml? Как добавить данные для каждого элемента?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...