管理多个模式的最好方法是使用XmlSchemaSet;将你的模式添加到一个XmlSchemaSet然后编译它。这应该回答你的“SOM进入记忆”。
对于如何使用LINQ来编译XmlSchemaSet,它非常依赖于您尝试解决的问题类型。例如,假设您试图获取XML名称空间中的所有元素。你可能会写这样的东西(我意识到我已经用C#表达了它,我希望你可以用它)。
XmlSchemaSet xset = new XmlSchemaSet();
xset.Add(XmlSchema.Read(...);
xset.Compile();
var query = from XmlSchemaElement element in xset.GlobalElements.Values where element.QualifiedName.Namespace == "urn:tempuri-org:mine" select element;
foreach(XmlSchemaElement element in query) DoSomething();
另一个例子是使用DISTINCT子句来收集一套XML命名空间,让你的一套。
List<string> query1 = (from XmlSchema schema in xset.Schemas() select schema.TargetNamespace).ToList();
IEnumerable<string> xmlns = query1.Distinct();
我希望这给你一个想法...