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