XML Schema Flattening的库

时间:2012-12-04 15:48:04

标签: c# c++ xml xsd flat

有一组N个XSD文件可以相互引用(include/import/redefine tags)。任务是将这组N XSD文件转换为最小可能数量的M XSD文件。转换意味着在可能的情况下就地插入包含的文件,解析引用等。

此功能在某些UI XML编辑器中成功运行。

是否有任何免费或商业库(本机或.NET)可以让我执行XML Schema展平?或者也许有一些关于展平算法的参考文献?

1 个答案:

答案 0 :(得分:2)

我认为你不需要图书馆。使用标准.NET模式类,这是将带有一堆包含的XSD转换为单个模式的代码:

static private void ResolveExternal(
  XmlSchema rootSchema, 
  XmlSchema curSchema,
  List<string> processed
)
{
  // Loop on all the includes
  foreach (XmlSchemaExternal external in curSchema.Includes) {
    // Avoid processing twice the same include file
    if (!processed.Contains(external.SchemaLocation)) {
      processed.Add(external.SchemaLocation);
      XmlSchema cur = external.Schema;
      // Recursive calls to handle includes inside the include
      ResolveExternal(rootSchema, cur, processed);
      // Move the items from the included schema to the root one
      foreach (XmlSchemaObject item in cur.Items) {
        rootSchema.Items.Add(item);
      }
    }
  }
  curSchema.Includes.Clear();
} // ResolveExternal

static public void ResolveExternal(XmlSchema schema)
{
  List<string> processed = new List<string>();
  ResolveExternal(schema, schema, processed);
} // ResolveExternal

您应该能够以类似的方式处理导入并重新定义。