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

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

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

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

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

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

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

Ответ 1

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

  1. Вы должны увидеть что-то вроде этого в вашем окне свойств документа XML:

    XML Properties > Schema

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

    XML Schema Selector

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

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

    Example of Error

Ответ 2

Вам не нужно вручную связывать файлы в 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" />

Ответ 3

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

Ответ 4

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

Примеры:

XSD:

<xs:schema .... targetNamespace="Datafile.xsd" ... >

XML:

<data xmlns="Datafile.xsd" >...</data>

См. Также: IntelliSense XML/XSD не работает в Visual Studio 2010

Ответ 5

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