如何在C#中将两个xsd内容合并为一个

时间:2014-10-07 10:04:35

标签: c# xml xsd schema xmlschemaset

我在字典中有2个xsd文件内容。我想合并两个内容并创建一个xsd文件。

来自字典的第一个xsd内容有一个导入标记,指向字典中的第二个xsd。

1st xsd -

<?xml version="1.0" encoding="IBM437"?>
<xs:schema xmlns:tns="http://schemas.microsoft.com/BizTalk/EDI/EDIFACT/2006/EnrichedMessageXML"         targetNamespace="http://schemas.microsoft.com/BizTalk/EDI/EDIFACT/2006/Enr
 ichedMessageXML" xmlns:xs="http://www.w3.org/2001/XMLSchema">

 <xs:import schemaLocation="COMP.EDI._00401._810.Schemas.Headers" namespace="http://EDI/Headers" />

 <xs:element name="X12EnrichedMessage">
   <xs:complexType>
    <xs:sequence>
     <xs:element xmlns:q1="http://EDI/Headers" ref="q1:Headers" />
      <xs:element name="TransactionSet">
      <xs:complexType>
        <xs:sequence>
          <xs:element xmlns:q2="http://schemas.microsoft.com/BizTalk/EDI/X12/2006" ref="q2:X12_00401_810" />
        </xs:sequence>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

第二个sxd -

<?xml version="1.0" encoding="IBM437"?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://EDI/Headers" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://EDI/Headers">

    <xs:element name="Headers">

 // Some content here     

    </xs:element>
</xs:schema>

我想要的xsd是两个xsd文件的合并。

我正在关注这个:http://msdn.microsoft.com/en-us/library/ms256237%28v=vs.110%29.aspx文章,我也可以将模式添加到schemaset对象,但是当我使用RecurseExternals函数时(来自文章),这不是显示合并的xsd而是2个不同的xsd 。

我的代码块 -

  XmlSchemaSet schemaSet = new XmlSchemaSet();

  // This prevents schemaLocation and Namespace warnings
  // at this point we already have the schema from schemaLocation.
  //schemaSet.XmlResolver = null;

  schemaSet.ValidationEventHandler += new ValidationEventHandler(ValidationCallback);

  // add schema in schema set from schemacollection object
  foreach (var item in schemaCollection)
  {
      schemaSet.Add(item.Key, new XmlTextReader(new StringReader(item.Value)));
  }

  schemaSet.Compile();

  XmlSchema mainXmlSchema = null;

  XmlSchemaImport import = new XmlSchemaImport();
  foreach (XmlSchema sch in schemaSet.Schemas())
  {
      // pick the main schema from the schemaset to include
      // other schemas in the collection.
      if (sch.TargetNamespace == mainSchemaNS)
      {
          mainXmlSchema = sch;
      }
      else
      {
          import.Namespace = sch.TargetNamespace;
          import.Schema = sch;
          mainXmlSchema.Includes.Add(import);
      }
  }

  schemaSet.Reprocess(mainXmlSchema);
  schemaSet.Compile();

  RecurseExternals(mainXmlSchema);
我做错了什么?

0 个答案:

没有答案