Получить список элементов XSD в C # - PullRequest
2 голосов
/ 07 декабря 2011

У меня есть XSD-файл, и я хочу получить список имен всех элементов в нем.Я не имею в виду такие вещи, как <xs:sequence> и т. Д., Просто «реальные вещи», которые на самом деле могут появляться в XML, которые действительны в соответствии с XSD.

Ответы [ 3 ]

1 голос
/ 07 декабря 2011

Если вы на самом деле не хотите делать это из своего кода, вы можете использовать Инструмент определения схемы XML (Xsd.exe) для создания исходного кода для объектов времени выполнения.

Оттуда вы можете использовать сериализацию Xml для создания действительных примеров XML для вашей заданной схемы Xsd.

1 голос
/ 07 декабря 2011

Реальные вещи немного расплывчаты

Но если вы хотите, чтобы все элементы были нужны, это просто Xpath.

Если вы хотите дерево, то вы не можете избежать последовательности и т. Д. Если у вас есть такие вещи, как xs: choice, у вас есть еще больше проблем.

Тогда есть атрибуты ...

Из SimpleContent или ComplexType ...

Может быть проще сгенерировать «пустой» XML-документ из xsd, а затем получить из этого то, что вы хотите. Это тоже неплохой кусок кода. Может, кто-то валяется, но ты можешь одолжить.

0 голосов
/ 08 декабря 2011

Поскольку вы пытаетесь написать код для этого, я предполагаю, что вы хотите делать это с разными файлами 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 показывает только те элементы (элементы или атрибуты), которые имеют данные;Обработка чего-то подобного описанному может быть намного проще (разбить строку с помощью /, все элементы кроме @ и т. д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...