Проверка 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-документа:
В редакторе набора XML-схем (открывается при нажатии на многоточие (...) в текстовом поле "Схемы" в окне "Свойства") необходимо убедиться, что у вас есть схема. Кроме того, убедитесь, что Use
столбец для этой схемы включен - если нет, нажмите на него - вы получите раскрывающийся список опций, выберите Use
один с зеленой галочкой:
Убедитесь, что окна Список ошибок Visual Studio видимы (меню Вид> Список ошибок). Это покажет все несоответствия между определениями схемы XML и XSD.
Как только все это будет сделано, редактор XML в Visual Studio должен выделить проблемы с вашим XML в редакторе с помощью синих кривых:
Вам не нужно вручную связывать файлы в 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 в конец моего имени файла, и проверка начала работать.