Схема LINQ — to XML — импорт нескольких XSD-файлов (.NET)

#linq #import #xsd #schema

#linq #импорт #xsd #схема

Вопрос:

Моя цель: я хотел бы выполнить поиск элементов в большой спецификации XML-схемы. compound из нескольких XSD-файлов (с использованием импорта).

Возможно ли использовать 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();
  

Я надеюсь, это даст вам представление…