2012-12-04 26 views
2

有一组的,其可以是指彼此(与include/import/redefine tags)N XSD文件。任务是本组N XSD的文件转换成M个XSD的文件的最低可能数目。转换意味着就地插入包含的文件在可能情况下,解析引用等库XML模式压扁

此功能成功地工作在一些用户界面的XML编辑器。

是否有任何免费或商业库(本地或.NET),让我执行XML架构扁平化?或者,也许有以扁平化算法一些参考?

回答

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 

你应该能够处理的进口和以类似的方式重新定义。