Walidacja XML z XSD w Visual Studio IDE


96

Wiem, że robiłem to już wcześniej, ale dzisiaj nie działa, ani nie mogę znaleźć niczego, co wyjaśniłoby, jak to zrobić. Może to być mój brak snu, ale podejrzewam gremliny.

Mam dokument XML i katalog pełen XSD, które go definiują. Jak ustawić Visual IDE tak, aby powiadamiało mnie o błędach walidacji, a następnie dostarcza inteligentną listę prawidłowych tagów i atrybutów w danym kontekście?

Co próbowałem:

  • Dodałem XSD do projektu z dokumentem XML.
  • Dodałem XSD do listy schematów XML (w pozycji menu XML / Schemas ...).
  • Dodałem nawet atrybuty schemaLocation i noNamespaceSchemaLocation do dokumentu XML.

Program Visual Studio nadal nie rezygnuje z żadnych przydatnych informacji dotyczących debugowania ani edytowania. Próbowałem zarówno 2010, jak i 2008 (myślałem, że robiłem to wcześniej w 2008)

Aktualizacja: Poprosiłem innego programistę o wypróbowanie tego i dla niego też się nie udało. Wie, że zrobił to z innymi dokumentami XML i sprawił, że to zadziałało. Następnie pobrałem edytor Oxygen XML i działał dobrze na tych samych plikach XML i XSD, więc pliki wydają się być w porządku (lub Oxygen jest bardziej wybaczający / elastyczny.).

Odpowiedzi:


138

Musisz skojarzyć dokument XML w programie Visual Studio z posiadanym plikiem XSD.

  1. W oknie Właściwości dokumentu XML powinieneś zobaczyć coś takiego:

    Właściwości XML> Schemat

  2. W edytorze zestawu schematów XML (otwieranym po kliknięciu (...) wielokropka w polu tekstowym „Schematy” w oknie Właściwości) upewnij się, że schemat jest obecny. Upewnij się również, że Usekolumna dla tego schematu jest włączona - jeśli nie, kliknij ją - pojawi się rozwijana lista opcji, wybierz tę Usez zielonym znacznikiem wyboru:

    Selektor schematu XML

  3. Upewnij się, że okna listy błędów programu Visual Studio są widoczne (widok menu> Lista błędów). Spowoduje to wyświetlenie wszystkich niespójności między definicjami schematów XML i XSD.

  4. Gdy to wszystko jest gotowe, edytor XML programu Visual Studio powinien podświetlić problemy z kodem XML w edytorze za pomocą niebieskich zawijasów:

    Przykład błędu


Dzięki, to świetne szczegółowe wyjaśnienie, ale moje nadal nie działa. Nie wiedziałem, że możesz dostać się do listy schematów z takich właściwości.
Jim McKeeth

@Jim McKeeth: co się stanie, jeśli zmodyfikujesz swój XML i zapiszesz go ponownie? Czasami walidacja XML wymaga wyzwalacza, aby uruchomić ...
marc_s

Zaakceptowałem twoją odpowiedź, chociaż nie zadziałała. Domyślam się, że mój system został właśnie podłączony, ale przeniosłem się na nowy komputer i teraz wszystko działa dobrze.
Jim McKeeth

38
@jim Nie jestem pewien, czy miałeś ten sam problem, ale spędziłem absurdalną ilość czasu, zanim zdałem sobie sprawę, że plik XML musi być otwarty w edytorze, a fokus musi znajdować się w edytorze, kiedy wywołujesz okno Właściwości. Dopiero wtedy otrzymujesz właściwości „Dokument XML”, w których możesz przypisać schemat. Jeśli fokus znajduje się w Eksploratorze rozwiązań, okno Właściwości wyświetla tylko właściwości pliku, tj. Nie jest tam możliwe przypisanie schematu.
herzbube

2
Myślę, że w samej odpowiedzi należy dodać wyniki @ herzbube.
ashish

35

Nie musisz ręcznie kojarzyć plików w programie Visual Studio - automatycznie dopasuje plik XML do pliku XSD, jeśli oba są otwarte, a przestrzeń nazw jest poprawnie zdefiniowana.

Aby zdefiniować przestrzeń nazw:

W elemencie głównym pliku XML:

<Data xmlns='http://yourdomain.com/yourschema.xsd'>
    ...
</Data>

W elemencie schematu pliku 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>

Uwaga dotycząca używania typów w schemacie, gdy masz targetNamespace

Ponieważ targetNamespacew swoim schemacie określasz a, wszelkie odniesienia do typów zdefiniowanych w schemacie będą musiały być poprzedzone przestrzenią nazw (dlatego dodaliśmy xmlns:thisatrybut w powyższym <xs:schema />elemencie).

<!-- 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

Kolejnym punktem niepowodzenia jest „blokowanie” plików schematu systemu Windows 7… kliknij prawym przyciskiem myszy plik xsd na dysku, Właściwości> Ogólne, a jeśli jest zablokowany, pojawi się przycisk „Odblokuj”. Powodowało to niepowodzenie weryfikacji XML w VS2012.



0

Miałem ten sam problem, ale VS już poprawnie odwoływał się do mojego schematu. Okazuje się, że plik, który próbowałem zweryfikować, nie miał rozszerzenia „xml”. Dodano .xml na końcu mojej nazwy pliku i sprawdzanie poprawności zaczęło działać.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.