Поскольку вы пытаетесь написать код для этого, я предполагаю, что вы хотите делать это с разными файлами XML-схем снова и снова;если это правда, тогда было бы важно понять, действительно ли вам нужно встраивать это в вашу кодовую базу или если это можно использовать как внешний инструмент.
Если вы действительно хотите это сделать, больше всего вынужно находится в пакете System.Xml.Schema.Начните с XmlSchemaSet для загрузки и компиляции файлов XSD.Затем, используя итератор для GlobalElements , просмотрите глобальные элементы, которые могут отображаться в качестве корневых элементов в документе XML, и просмотрите их (для чего вам нужно, используйте свойства PSVI);как кто-то упоминал, будут типы, которые нужно пройти, композиторы и т. д .;и еще есть: абстрактные элементы (которые не могут отображаться в XML, ссылки на абстрактные элементы, а не члены групп замещения), запрещенные атрибуты, ограниченные типы и т. д.
Я недавно ответил еще один пост , который может быть связан с вашей потребностью;Ваша опубликованная XML-схема может выглядеть следующим образом:
root/ship/engine/@MaxSpeed,A,1..1,True
root/ship/crew/@function,A,1..1,True
root/ship/@Name,A,1..1,True
root/ship/@class,A,1..1,True
root/ship/special_abilities/hull/@separable,A,0..1,False
root/ship/special_abilities/hull/@canCarryWesley,A,0..1,False
root/ship/special_abilities/hull/@capableOfLanding,A,0..1,False
Если хотите, вы можете иметь дело только с первым столбцом;сгенерированный XPath показывает только те элементы (элементы или атрибуты), которые имеют данные;Обработка чего-то подобного описанному может быть намного проще (разбить строку с помощью /, все элементы кроме @ и т. д.)