2011-11-13 51 views
2

我的目标: 我想搜索大型XML Schema规范中的元素。来自多个XSD文件的复合(使用导入)。LINQ - 到XML架构 - 导入多个XSD文件(.NET)

可以使用LINQ吗?如何将整个SOM(模式对象模型)存储到内存中然后询问?

我想:

Dim reader As XmlTextReader = New XmlTextReader(path) 
Dim myschema As XmlSchema = XmlSchema.Read(reader, AddressOf ValidationCallback) 

但我不知道如何在这里使用LINQ。

回答

1

管理多个模式的最好方法是使用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(); 

我希望这给你一个想法...