LINQ - to XML Schema - импорт нескольких файлов XSD (.NET) - PullRequest
2 голосов
/ 13 ноября 2011

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

Возможно ли использовать LINQ? Как я могу сохранить весь SOM (объектная модель схемы) в памяти и затем спросить?

Я пытался:

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

Но я понятия не имею, как использовать LINQ здесь.

1 Ответ

1 голос
/ 15 ноября 2011

Лучший способ управлять несколькими схемами - это использовать 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();

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

...