Visual Studio IDE'de XSD ile XML Doğrulaması


98

Bunu daha önce yaptığımı biliyorum, ama bugün işe yaramıyor ve nasıl yapılacağını açıklayan herhangi bir yer bulamıyorum. Uykusuzluğum olabilir, ama gremlinlerden şüpheleniyorum.

Bir XML belgem ve onu tanımlayan XSD'lerle dolu bir dizine sahibim. Visual IDE'yi doğrulama hatalarını bana bildirecek ve ardından belirli bir bağlamda geçerli etiketlerin ve özniteliklerin akıllıca bir listesini sağlayacak şekilde nasıl ayarlayabilirim?

Ne denedim:

  • XSD'leri XML belgesi ile projeye ekledim.
  • XSD'leri XML Şema listesine ekledim (XML / Şemalar ... menü öğesi altında.)
  • XML belgesine schemaLocation ve noNamespaceSchemaLocation özniteliklerini bile ekledim.

Visual Studio hala herhangi bir yararlı hata ayıklama veya düzenleme bilgisinden vazgeçmiyor. Hem 2010 hem de 2008'i denedim (Daha önce 2008'de yaptım diye düşündüm)

Güncelleme: Başka bir geliştiriciye bunu denedim ve onun için de başarısız oldu. Bunu diğer XML belgeleriyle yaptığını ve çalıştırdığını biliyor. Daha sonra Oxygen XML düzenleyicisini indirdim ve aynı XML ve XSD dosyalarında iyi çalıştı, bu yüzden dosyalar iyi görünüyor (veya Oxygen daha bağışlayıcı / esnek.)

Yanıtlar:


139

Visual Studio'daki XML belgesini sahip olduğunuz XSD dosyasıyla ilişkilendirmeniz gerekir.

  1. XML belgenizin Özellikler pencerenizde şuna benzer bir şey görmelisiniz:

    XML Özellikleri> Şema

  2. XML şema kümesi düzenleyicisinde (Özellikler pencerenizdeki "Şemalar" metin kutusundaki (...) üç noktaya tıkladığınızda açılır) şemanızın mevcut olduğundan emin olmanız gerekir. Ayrıca, Useo şema için sütunun etkinleştirildiğinden emin olun - değilse, üzerine tıklayın - bir açılır seçenek listesi alırsınız Use, yeşil onay işaretli olanı seçin :

    XML Şema Seçici

  3. Visual Studio'nun Hata Listesi pencerelerinin görünür olduğundan emin olun (menü Görünümü> Hata Listesi). Bu, XML ve XSD şema tanımları arasındaki tüm tutarsızlıkları gösterecektir.

  4. Tüm bunlar yerine getirildikten sonra, Visual Studio XML düzenleyicisi, mavi dalgalı çizgiler kullanarak düzenleyicide XML'nizle ilgili sorunları vurgulamalıdır:

    Hata Örneği


Teşekkürler, bu çok detaylı bir açıklama ama benimki hala çalışmıyor. Şema listesine bunun gibi özelliklerden ulaşabileceğinizi bilmiyordum.
Jim McKeeth 01

@Jim McKeeth: XML'nizi değiştirip tekrar kaydederseniz ne olur? Bazen XML doğrulamasının
devreye girmesi

Benim için işe yaramasa da cevabınızı kabul ettim Tahminimce sistemime yeni hortum verildi, ancak yeni bir bilgisayara geçtim ve şimdi her şey yolunda gidiyor.
Jim McKeeth

38
emin değil misiniz aynı problem vardı, ama XML dosyası editörü açık olmalı ve odak olması gerektiğini fark önce bir zaman gülünç miktarda harcanan eğer @jim editörü Özellikler penceresini çağırmak. Ancak o zaman şema atayabileceğiniz "XML Belgesi" özelliklerini elde edersiniz. Odak, Çözüm Gezgini'ndeyse, Özellikler penceresi yalnızca dosya özelliklerini görüntüler; yani burada şema ataması mümkün değildir.
herzbube

2
Bence @ herzbube'nin bulgularını cevaba eklemelisiniz.
Ashish

35

Dosyaları Visual Studio'da manuel olarak ilişkilendirmenize gerek yoktur - her ikisini de açarsanız ve ad alanınızı doğru bir şekilde tanımladıysanız, XML dosyasını bir XSD dosyasıyla otomatik olarak eşleştirir.

Ad alanını tanımlamak için:

XML dosyasının kök öğesinde:

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

XSD dosyasının şema öğesinde:

<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'e sahip olduğunuzda şemanızda Türleri kullanma hakkında bir not

Şemanızda bir targetNamespacebelirlediğiniz için, şemada tanımlanan türlere yapılan tüm referansların bir ad alanı ile ön eklenmesi gerekecektir (bu nedenle xmlns:thisyukarıdaki <xs:schema />öğeye niteliği ekledik ).

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

Buradaki diğer bir başarısızlık noktası, Windows 7 şema dosyalarını "bloke eden" ... diskteki xsd dosyasına sağ tıklayın, Özellikler> Genel ve eğer engellenmişse, bir "Engellemeyi Kaldır" düğmesine sahip olacaksınız. Bu, XML doğrulamamın VS2012'de başarısız olmasına neden oluyordu.



0

Aynı sorunu yaşadım, ancak VS şemama zaten doğru şekilde başvuruyordu. Doğrulamaya çalıştığım dosyanın 'xml' dosya uzantısına sahip olmadığı ortaya çıktı. Dosya adımın sonuna .xml eklendi ve doğrulama çalışmaya başladı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.