有一组N个XSD文件,它们可以互相引用(使用include/import/redefine tags
)。任务是将这组N个XSD文件转换为最小数量的M个XSD文件。转换意味着在可能的情况下就地插入包含的文件,解析引用等。
此功能可在某些UI XML编辑器中成功使用。
是否有任何免费的或商业的库(本机或.NET)可以让我执行XML Schema展平?也许有一些关于展平算法的引用?
最佳答案
我认为您不需要图书馆。使用标准的.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
您应该能够处理导入并以类似的方式重新定义。