2010-07-01 21 views
84

Wiem, że już to zrobiłem, ale nie działa to dzisiaj, nie mogę też nigdzie znaleźć wyjaśnienia, jak to zrobić. To może być mój brak snu, ale podejrzewam gremliny.Sprawdzanie poprawności XML za pomocą XSD w Visual Studio IDE

Mam dokument XML i katalog pełen XSD, które definiują go. Jak ustawić Visual IDE w celu powiadomienia mnie o błędach sprawdzania poprawności, a następnie dostarczyć listę inteligentnych znaczników i atrybutów w danym kontekście?

Co próbowałem:

  • Dodałem XSD do projektu z dokumentu XML.
  • Dodałem XSD do listy schematów XML (pod XML/Schematy ... element menu).
  • Do dokumentu XML dodałem nawet atrybuty schemaLocation i noNamespaceSchemaLocation.

Program Visual Studio nadal nie podaje żadnych przydatnych informacji o debugowaniu ani edycji. Próbowałem zarówno 2010 i 2008 (robiłem to wcześniej w 2008 roku myślałem)

Update: miałem inny deweloper spróbować to i nie udało mu też. Wie, że zrobił to z innymi dokumentami XML i działał. I następnie pobrać edytor XML tlenu i to działało dobrze na tych samych plikach XML i XSD, więc pliki wydają się być w porządku (lub Tlen jest bardziej wyrozumiały/elastyczny...)

Odpowiedz

115

Jim

Musisz powiązać dokument XML w Visual Studio z pliku XSD masz - powinieneś zobaczyć coś takiego w swoim oknie Właściwości dokumentu XML:

alt text

Mirror 1

W edytorze zestawów schematów XML (otwiera się po kliknięciu wielokąta (...) w polu tekstowym "Schematy" w oknie Właściwości) należy upewnić się, że obecny jest schemat. Ponadto, upewnij się, że kolumna Use na tym schemacie jest włączona - jeśli nie, kliknij na nim - dostaniesz listę rozwijaną opcji, wybrać Use jedną z zielonym znacznikiem:

alt text

Mirror 1

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

Gdy wszystko jest na swoim miejscu, Edytor Visual Studio XML należy podkreślić problemy z XML w edytorze za pomocą niebieskich squigglies:

alt text

Mirror 1

+0

Dzięki, to jest bardzo szczegółowe wyjaśnienie, ale moje wciąż nie działa. Nie wiedziałem, że możesz dostać się na listę schematów z takich właściwości. –

+0

@ Jim McKeeth: a jeśli zmodyfikujesz swój XML i zapiszesz go ponownie? Czasami sprawdzanie poprawności XML wymaga wyzwalacza, aby ... –

+0

Przyjąłem twoją odpowiedź, mimo że nie działała dla mnie. Zgaduję, że mój system został po prostu rozwiązany, ale przeniosłem się do nowego komputera i wszystko teraz działa dobrze. –

1

Czy Twój xsd zawierać atrybut "targetNamespace"/schema/@ targetNamespace, który jest podobny do obszaru nazw, do którego się odwołujesz w xml?

Przykład:

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

xml: < danych xmlns = "Datafile.xsd">. ..

zobaczyć również XML/XSD intellisense not working in Visual Studio 2010

0

miałem ten sam problem, ale VS została przedstawieniu mojego schematu już poprawnie. Okazało się, że plik, który próbowałem zweryfikować, nie ma rozszerzenia "xml". Dodano .xml na końcu mojej nazwy pliku i sprawdzanie poprawności zaczęło działać.

29

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

Aby zdefiniować przestrzeń nazw:

W elementu głównego pliku XML za:

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

w elemencie schematu pliku XSD za:

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

notatkę na temat korzystania z typów w Twój schemat, gdy masz celNazwisko

Ponieważ określasz w swoim schemacie targetNamespace, wszelkie odniesienia do typów zdefiniowanych w schemacie będą wymagały przedrostka z przestrzenią nazw (dlatego dodaliśmy atrybut xmlns:this w powyższym kodzie <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" /> 
2

Kolejnym punktem awarii tutaj jest Windows 7 „blokowanie” pliki schematu ... prawym przyciskiem myszy na pliku xsd na dysku Właściwości> Ogólne i jeśli jest zablokowany, musisz przycisk „Odblokuj” . Powodowało to niepowodzenie sprawdzania poprawności XML w VS2012.

Powiązane problemy