Проверка XML с помощью XSD в Visual Studio IDE - PullRequest
92 голосов
/ 01 июля 2010

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

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

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

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

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

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

Ответы [ 5 ]

130 голосов
/ 02 июля 2010

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

  1. Вы должны увидеть что-то подобное в окне «Свойства» XML-документа:

    image Schema">

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

    XML Schema Selector

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

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

    Example of Error

33 голосов
/ 30 мая 2013

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

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

1 голос
/ 29 ноября 2010

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

Примеры:

XSD :

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

XML :

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

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

0 голосов
/ 29 сентября 2012

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

...