Проверка XML с помощью XSD в Visual Studio IDE

Я знаю, что делал это раньше, но сегодня это не работает, и я не могу найти где-нибудь, что объясняет, как это сделать. Это может быть мой недостаток сна, но я подозреваю, что гремлины.

У меня есть документ XML и каталог, полный XSD, которые его определяют. Как настроить Visual IDE, чтобы уведомлять меня о сбоях проверки, а затем предоставлять список действительных тегов и атрибутов в заданном контексте?

Что я пробовал:

  • Я добавил XSD в проект с документом XML.
  • Я добавил XSD в список схем XML (в пункте меню XML / Схемы. . .).
  • Я даже включил атрибуты schemaLocation и noNamespaceSchemaLocation в документ XML.

Visual Studio до сих пор не отказывается от полезной информации отладки или редактирования. Я пробовал и 2010, и 2008 (я думал, что раньше, в 2008 году)

Обновление: у меня был другой разработчик, попробовавший это, и он тоже не смог. Он знает, что он сделал это с другими документами XML и работал. Затем я скачал редактор Oxygen XML, и он отлично работал с теми же файлами XML и XSD, поэтому файлы вроде бы хороши (или Oxygen более щадящий / гибкий. . .)

5 ответов

Решение

Джим,

Вам необходимо связать XML-документ в Visual Studio с имеющимся у вас XSD-файлом - вы должны увидеть что-то подобное в окне "Свойства" XML-документа:

альтернативный текст

Зеркало 1

В редакторе набора XML-схем (открывается при нажатии на многоточие (...) в текстовом поле "Схемы" в окне "Свойства") необходимо убедиться, что у вас есть схема. Кроме того, убедитесь, что Use столбец для этой схемы включен - если нет, нажмите на него - вы получите раскрывающийся список опций, выберите Use один с зеленой галочкой:

альтернативный текст

Зеркало 1

Убедитесь, что окна Список ошибок Visual Studio видимы (меню Вид> Список ошибок). Это покажет все несоответствия между определениями схемы XML и XSD.

Как только все это будет сделано, редактор XML в Visual Studio должен выделить проблемы с вашим XML в редакторе с помощью синих кривых:

альтернативный текст

Зеркало 1

Вам не нужно вручную связывать файлы в Visual Studio - он автоматически сопоставит XML-файл с XSD-файлом, если они оба открыты, а пространство имен определено правильно.

Чтобы определить пространство имен:

В корневом элементе файла XML:

<Data xmlns='http://yourdomain.com/yourschema.xsd'>
    ...
</Data>

В элементе схемы файла XSD:

<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://yourdomain.com/yourschema.xsd"
    xmlns:this="http://yourdomain.com/yourschema.xsd"
    elementFormDefault="qualified">
    ...
</xs:schema>

Замечание об использовании типов в вашей схеме, когда у вас есть targetNamespace

Потому что вы указываете targetNamespace в вашей схеме любые ссылки на типы, определенные в схеме, должны начинаться с префикса пространства имен (именно поэтому мы добавили xmlns:this атрибут в выше <xs:schema /> элемент).

<!-- Define the type as normal -->
<xs:complexType name="Row">
    <xs:sequence>
        <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1" />
        <xs:element name="Value" type="xs:float" minOccurs="1" maxOccurs="1" />
    </xs:sequence>
</xs:complexType>
<!-- Use the type (note the "this:" prefix) -->
<xs:element name="Row" type="this:Row" minOccurs="0" maxOccurs="unbounded" />

Другая точка сбоя здесь - блокирующие файлы схемы Windows 7... щелкните правой кнопкой мыши файл xsd на диске, Свойства> Общие, и если он заблокирован, у вас будет кнопка "Разблокировать". Это приводило к сбою моей проверки XML в VS2012.

Содержит ли ваш xsd атрибут "targetNamespace" /schema/@targetNamespace, который похож на пространство имен, на которое вы ссылаетесь в xml?

Пример:

xsd:

xml: ...

см. также XML/XSD intellisense, не работающий в Visual Studio 2010

У меня была такая же проблема, но VS уже правильно ссылался на мою схему. Оказывается, файл, который я пытался проверить, не имел расширения "xml". Добавил.xml в конец моего имени файла, и проверка начала работать.

Другие вопросы по тегам