В чем разница между элементами и элементами в схеме XSD? - PullRequest
1 голос
/ 23 ноября 2011

В чем разница между xmlschema.Items xmlschema.Elements?Кажется, они вообще возвращают разные вещи?что я должен использовать, когда?Что мне делать, если я просто хочу просто последовательно получить все элементы, определенные в XSD?Я использовал подходы .Items и .Elements, оба дают мне разные результаты, я не уверен, какой из них подойдет мне.

foreach(var entry in xmlschema.Elements)
            {
                 Console.WriteLine("{0}:{1}",entry.Key,entry.Value);
            }
 foreach (var obj in xmlschema.Items)
            {
                Console.WriteLine("{0}",obj.GetType());
            }

Обновление: - и почему оба не принимают эти

<attribute name="ref" type="IDREF"/>
  <attribute name="sequenceID" type="integer"/>
<element name="Metadata" type="s:MetadataType" abstract="true"/>

1 Ответ

3 голосов
/ 24 ноября 2011

Коллекция Elements представляет собой информационный набор после проверки схемы (PSVI), который охватывает только элементы, определенные на уровне схемы. Эта ссылка на MSDN говорит о PSVI.

Коллекция Items проходит предварительную проверку; это XmlSchemaObject s, определенные на уровне схемы; они в исходном порядке XML-схемы.

Что касается использования до и после проверки, это вопрос требований. Например, если вы хотите просмотреть определения в порядке «источника», то вы должны следовать не-PSVI; если все, что вам нужно, это попасть в информационный набор, PSVI - ваш лучший выбор; или если вам нужно обрабатывать схемы, которые загружаются, но не компилируются, то вы застряли с не-PSVI.

Если вы хотите, чтобы элементы были в исходном порядке, вы можете сделать это только через коллекцию Items.

Глобальные атрибуты (на уровне схемы) отображаются в разделе Атрибуты коллекция.

Все, что является глобальным, должно отображаться в коллекции Items, за исключением внешних ссылок (xsd: include, xsd: import и xsd: redefine), которые отображаются в Включает .

Если что-то, что определено на уровне схемы, не отображается в коллекции Items, это будет ошибкой. Я должен сказать, однако, что я никогда не видел этого раньше - пожалуйста, проверьте, что то, что вы ищете, действительно определено как дочерний элемент элемента xsd: schema.

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