Перевірка XML за допомогою XSD у середовищі Visual Studio IDE


96

Я знаю, що робив це раніше, але сьогодні це не працює, і я не можу знайти де-небудь, що пояснює, як це зробити. Це може бути через відсутність сну, але я підозрюю, що гремліни.

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

Що я пробував:

  • Я додав XSD до проекту за допомогою документа XML.
  • Я додав XSD до списку XML Schema (під пунктом меню XML / Schemas ...).
  • Я навіть включив атрибути schemaLocation та noNamespaceSchemaLocation до документа XML.

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

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

Відповіді:


138

Вам потрібно буде пов’язати документ XML у Visual Studio із наявним у вас файлом XSD.

  1. Ви повинні побачити щось подібне у вікні Властивості документа XML:

    Властивості XML> Схема

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

    Вибір схеми XML

  3. Переконайтеся, що вікна списку помилок Visual Studio видимі (меню Перегляд> Список помилок). Це покаже всі невідповідності між визначеннями схем XML та XSD.

  4. Після того, як все це буде на місці, редактор Visual Studio XML повинен висвітлити проблеми з вашим XML у редакторі, використовуючи сині бризки:

    Приклад помилки


Дякую, це чудове детальне пояснення, але моє все ще не працює. Я не знав, що ви можете потрапити до списку схем із таких властивостей.
Jim McKeeth

@Jim McKeeth: що, якщо ви зміните свій XML і збережете його знову? Іноді для перевірки XML потрібен тригер для запуску ...
marc_s

Я прийняв вашу відповідь, хоча мені це не вдалося. Я припускаю, що моя система була просто шлангова, але я перейшов на новий комп’ютер, і зараз все працює нормально.
Jim McKeeth

38
@jim Не впевнений, що у вас була та сама проблема, але я витратив смішний час, перш ніж зрозумів, що XML-файл повинен бути відкритим у редакторі, а фокус повинен бути в редакторі, коли ви викликаєте вікно Властивості. Тільки тоді ви отримуєте властивості "Документ XML", де ви можете призначити схему. Якщо фокус знаходиться в Провіднику рішень, у вікні Властивості відображаються лише властивості файлу, тобто там ніяке призначення схеми неможливе.
herzbube

2
Я думаю, вам слід додати висновки @ herzbube у саму відповідь.
ашіш

35

Вам не потрібно вручну асоціювати файли у 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.


1

Чи містить ваш xsd атрибут "targetNamespace" /schema/@targetNamespace, подібний до простору імен, на який ви посилаєтесь у xml?

Приклади:

XSD :

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

XML :

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

Див. Також: XML / XSD intellisense не працює у Visual Studio 2010


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.