DTD veya XSD'lerinden örnek XML belgeleri nasıl oluşturulur?


186

Önemli miktarda XML dönüşümü içeren bir uygulama geliştiriyoruz. Tek başına uygun giriş testi verimiz yok, sadece DTD veya XSD dosyaları var. Test verilerimizi bu dosyalardan kendimiz oluşturmak istiyoruz. Bunu yapmanın kolay / ücretsiz bir yolu var mı?

Düzenle

Görünüşe göre bunun için ücretsiz araçlar yok ve OxygenXML'in bunun için en iyi araçlardan biri olduğunu kabul ediyorum.


8
Ben Q & A biçimini veya talep sığmayan bu soruların yanıtları görmek için başarısızdebate, arguments, polling, or extended discussion
MJN

Yanıtlar:


29

Bence Oksijen ( http://www.oxygenxml.com/ ) bunu da yapıyor, ama bu başka bir ticari ürün. Yine de güzel bir şey ... Çok fazla XML çalışması yapan herkes için şiddetle tavsiye ediyorum. Güzel bir Eclipse eklentisinde de geliyor.

30 günlük ücretsiz, tam özellikli bir deneme olduğuna inanıyorum.


Farklı XSD'lerden şemaları devralan bir sürü XSD'im var ve bu XSD'den test amaçlı bir XML dosyası oluşturmam gerekiyor, bunu yapmak için oxygenXML kullanıyorum ama yapmaya çalıştığımda, benim için çalışmıyor ve lütfen kök düğümü tanımlayın diyor ama bunu yapmama izin vermiyor. Öyleyse kimse oksijenXML ile çalışmışsa bunun için ne olabileceğini önerin?
Rachel

Teşekkürler leveland. Bu da sorumu yanıtladı! Soruma cevap vermek isterseniz: stackoverflow.com/questions/7041388/… , sizinkini yanıt olarak işaretlemekten mutluluk duyarım.
Eric H

179

Visual Studio 2008 SP1 ve sonraki sürümlerinde XML Şeması Gezgini bazı temel örnek verileri içeren bir XML belgesi oluşturabilir:

  1. XSD belgenizi açın
  2. XML Şeması Gezgini'ne geçme
  3. Kök düğümü sağ tıklayın ve "Örnek Xml Oluştur" u seçin

XML Şeması Gezgini'nin ekran görüntüsü


15
evet, bu en kolay yol. XSD'yi açın, XML Şeması Gezgini'ne geçin, kök düğümü seçin, sağ tıklayın ve "Örnek Xml Oluştur" u seçin.
balint

+1 @Sam Warwick ve @balint'e teşekkür ederiz. Bu gerçekten yardımcı oldu!
jessegavin

3
Bunu VS2008 ile kullandım, ancak VS2010'da bulamıyorum. Bunun hala var olduğunu kimse doğrulayabilir mi?
Simon

Simon ile aynı: Bunu VS2010'da da bulamıyorum. MSDN'ye göre, hala orada olmalı, ancak kullanıcı arayüzünde hiçbir yerde görünmeyecek ... :-(
Martijn

6
@Simon: "Örnek XML Oluştur" yalnızca şema gezginindeki öğelerden birini sağ tıklattığınızda görüntülenir. Öğeler yeşil sol / sağ açılı parantezler üzerinden grafiksel olarak gösterilmiştir: "<>". Muhtemelen bir türü sağ tıklarsınız ve mesaj oluştur seçeneği onu sadece elemanlar için üretir (ki bu mantıklıdır).
Miguel Sevilla

126

Ücretsiz ve açık kaynaklı Eclipse IDE'nin son sürümlerinde DTD ve XSD dosyalarından XML belgeleri oluşturabilirsiniz. Belirli bir * .dtd veya * .xsd dosyasına sağ tıklayın ve "Oluştur -> XML Dosyası ..." seçeneğini seçin. Hangi kök öğenin oluşturulacağını ve isteğe bağlı niteliklerin ve öğelerin oluşturulup oluşturulmayacağını seçebilirsiniz.

Elbette DTD ve XSD şema dosyalarınızı oluşturmak ve düzenlemek için Eclipse'i kullanabilirsiniz. Ayrıca herhangi bir eklenti kurmanıza gerek yoktur. Standart dağılıma dahildir.


Teşekkürler! Tutulma ücretsizdir ve bu mükemmel bir çözümdü.
Akku

Eclipse özelliğinin bu işlevi sağladığını biliyor musunuz? "Generate" alt menümde tek öğe olarak "JAXB Classes" vardır.
otto.poellath

9
Bu seçenekleri almak için Web Araçları Projesi'ni yüklemeniz gerekir (Yardım-> Yeni Yazılım Yükle bölümüne bakın).
pwaring

3
Eclipse iyi bir seçenek gibi görünüyor, ancak nesli ithal XSD'leri takip edemedim. Örneğin, 3 öğeyi açıklayan bir XSD'ye sahipsem ve bunlardan biri başvurulan / içe aktarılan bir XSD'de tanımlanan bir complexType olsaydı, bu öğe için oluşturmazdı. Herhangi bir fikir?
David Hergert

@DavidHergert Basit bir çözüm bir saplama türü oluşturmak olacaktır.
Adam Matan

32

Intellij Idea kullanıcıları için:

Araçlar -> XML İşlemlerine bir göz atın

resim açıklamasını buraya girin

(Test ettiğim kadarıyla) çok iyi çalışıyor gibi görünüyor.

Düzenle:

@NaXa tarafından belirtildiği gibi, şimdi XSD dosyasını sağ tıklayıp "XSD Şemasından XML Belgesi Oluştur ..." u da tıklayabilirsiniz.


(dizi için) oluşturulacak öğe sayısını belirtmenin bir yolu var mı?
Nikita

Bu konunun her çözümünü test ettim ve bu en iyi çalıştı
FLX

1
Birçok ithalat ile XSD ile en son RubyMine'de (v. 7.0, Intellij Idea tabanlı) benim için çalışmıyor. Hata mesajından başka bir şeyim yok.
Envek

3
"Şema Derleme Hatası"?
Kırmızı Bezelye

1
Daha yeni sürümlerde,
XSD'ye

12

Sourceforge.net'te mevcut olan kamp işlemci, herhangi bir XSD için xml test senaryosu üretecektir. Sadece rastgele önemsiz olanları değil, gerçekçi örnekleri sağlamak için içerik ipuçlarını kullanma da dahil olmak üzere kendi test örneklerinizi nasıl oluşturacağınızı gösteren bir eğitim vardır.

Eğiticiye buradan ulaşabilirsiniz: http://www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf

XSD'nizi daha XSLT dostu bir yapıya yeniden yansıtmak için OASIS İçerik Birleştirme Mekanizması (CAM) standardını kullanan araç hakkında daha fazla bilgi kaynak web sitesinde bulunabilir - http://www.jcam.org.uk

Keyfini çıkarın, DW


3
Sourceforge.net indirmek için doğrudan bağlantı: sourceforge.net/projects/camprocessor

@Pyderman - bu sizin ayarlarınız - nasıl değiştireceğinize bakın.
Ghoti

10

Sun / Oracle Çok Şema Doğrulayıcı'nın bir parçası olan XML Eşgörünüm Oluşturucusu'nu kullanabilirsiniz .

README.txt ifadesi:

Sun XML Generator, çeşitli şemalardan çeşitli XML örnekleri oluşturmak için bir Java aracıdır. DTD, RELAX Ad Alanı, RELAX Core, TREX ve W3C XML Şeması Bölüm 1 alt kümesini destekler. [...]

Bu, şemalardan hem geçerli hem de geçersiz örnekler oluşturabilen bir komut satırı aracıdır. Belirli bir şemaya uyması gereken XML uygulamaları için test senaryoları oluşturmak için kullanılabilir.

İndirme ve açmak xmlgen.zipgelen msv indirme sayfasına ve ayrıntılı kullanım talimatları almak için aşağıdaki komutu çalıştırın:

java -jar xmlgen.jar -help

Araç bir BSD lisansı altında yayınlanmış gibi görünüyor; kaynak koduna buradan erişilebilir


Çok hoş! Gerçi biraz sınırlı. Diğer XSD'yi ithal eden bir XSD'de denedim ve başarısız oldu. Ama bir DTD'de çok iyi çalışıyor. Teşekkürler!
lindelof

1
Mevcut bağlantılar: ana sayfa , indirmeler . xmlgen.zipsadece nigthlydizinde. Benim xsd bir örnek oluşturma yetersizliği onaylamak.
Jarekczek

Benim durumumda, --exampleyeni bir örnek dosya oluşturmak için kullanılabilecek belirteçleri içermek için dosyayı kullanmak gerekiyordu . Bir örnek yapmak için bir örnek alır! Kolay değil ...
Kızıl Bezelye

java.net bağlantıları temelde öldü.
RedGrittyBrick

10

XMLSpy bunu sizin için yapar, ancak bu ücretsiz değildir ...

Ben inanıyorum Sıvı XML Studio sizin için yapar ve ücretsizdir, ancak ben şahsen test verilerini oluşturmak için kullanmadım.


Bir şeyler üretir, ancak bunun üzerinde fazla denetime sahip değilsiniz: toplevel elemanı ve bazı genel seçenekleri seçebilir, ancak vb varyantları birçok testcases set oluşturmak için XMLSpy kullanamazsınız
Hans-Peter mağazza

XMLSpy iyi görünüyordu, ancak daha sonra onu oluşturmak için kullanılan xsd'ye doğrulanamayan xml oluşturdu. Başarısız. Ayrıca postiveintegertarlaya dikildi - *ERROR*yerine koyarak
Tim Abell

7

Kimse şu ana kadar soruyu cevaplayamadı gibi görünüyor :)

EclipseLink'ın MOXy dinamik olarak bağlama sınıfları oluşturmak için kullanın ve sonra yinelenen bağlı türleri üzerinden gitmek. Biraz ağırdır, ancak nesne ağacı başlatıldıktan sonra XPath değer enjeksiyonuna izin verir:

InputStream in = new FileInputStream(PATH_TO_XSD);
DynamicJAXBContext jaxbContext = 
            DynamicJAXBContextFactory.createContextFromXSD(in, null, Thread.currentThread().getContextClassLoader(), null);
DynamicType rootType = jaxbContext.getDynamicType(YOUR_ROOT_TYPE);
DynamicEntity root = rootType.newDynamicEntity();
traverseProps(jaxbContext, root, rootType, 0);

TraverseProps oldukça basit özyinelemeli yöntemdir:

private void traverseProps(DynamicJAXBContext c, DynamicEntity e, DynamicType t, int level) throws DynamicException, InstantiationException, IllegalAccessException{
        if (t!=null) {
            logger.info(indent(level) + "type [" + t.getName() + "] of class [" + t.getClassName() + "] has " + t.getNumberOfProperties() + " props");
            for (String pName:t.getPropertiesNames()){
                Class<?> clazz = t.getPropertyType(pName);
                logger.info(indent(level) + "prop [" + pName + "] in type: " + clazz);
                //logger.info("prop [" + pName + "] in entity: " + e.get(pName));

                if (clazz==null){
                    // need to create an instance of object
                    String updatedClassName = pName.substring(0, 1).toUpperCase() + pName.substring(1);
                    logger.info(indent(level) + "Creating new type instance for " + pName + " using following class name: " + updatedClassName );
                    DynamicType child = c.getDynamicType("generated." + updatedClassName);
                    DynamicEntity childEntity = child.newDynamicEntity();
                    e.set(pName, childEntity);
                    traverseProps(c, childEntity, child, level+1);
                } else {
                    // just set empty value
                    e.set(pName, clazz.newInstance());
                }
            }
        } else {
            logger.warn("type is null");
        }
    }

Her şeyi XML'ye dönüştürmek oldukça kolaydır:

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);

7

Ayrıca xml örneklerinizi oluşturmak için http://www.wmhelp.com adresinde bulunan XMLPad'i (ücretsiz) kullanabilirsiniz . Menüden: XSD -> örnek XML dosyası oluştur.


Bir yığın taşması alıyorum veya "WMHelp XmlPad çalışmayı durdurdu" seçeneğini belirlediğimde "Örnek Veri Üret" i seçiyorum
Red Pea

5

Microsoft örnek olarak bir "belge oluşturucu" aracı yayımladı. Bu, örnek uygulamanın mimarisini ve çalışmasını ayrıntılı olarak açıklayan bir makaledir .

Sadece örnek oluşturma aracını çalıştırmak istiyorsanız, buraya tıklayın ve MSI'yı yükleyin.

Bedava. Kaynak kullanılabilir. Çalıştırmak için .NET Framework gerektirir. Yalnızca XSD'lerle çalışır. (NG veya DTD'yi rahatlatmayın).


Yukarıdaki bağlantı, MSDN'de 'XML Şemalarından XML Belgeleri Oluşturma' adlı bir makaleye
Sam Warwick

Yükleyici, makinenize bir grup C # kodu bırakır. Bunları LinqPad'e döktüğünüzde ücretsiz XML örnek oluşturucunuz var. Ta dah!
Sean Kearon

9 yıl sonra, bu XSD'ler için hala harika çalışıyor.
Mikanikal


4

Microsoft Office, XSD'yi içe aktarma olarak alan ve XML dosyaları oluşturmak için form tabanlı bir düzenleyiciyi hızlı ve kolay bir şekilde tanımlamanızı sağlayan ' InfoPath'e sahiptir . Biri formu tanımladığınız diğeri ise formu doldurarak XML dosyasını oluşturduğunuz başka bir mod vardır. İlk olarak Office 2003 ile geldiğine inanıyorum ve çoğu insan asla yüklemedi. Ne kadar çok sevdiğim için beni şok ediyor.


1

XMLBlueprint 7.5 aşağıdakileri yapabilir: - dtd'den örnek xml oluşturma - gevşeme şemasından örnek xml oluşturma - xml şemasından örnek xml oluşturma


1

SoapUI'nin açık kaynak sürümü WSDL'den (XSD türü tanımları içeren) SOAP istekleri üretebilir, bu nedenle bu işlevin açık kaynaklı bir uygulaması var gibi görünüyor. Ne yazık ki, hangi kütüphanenin buna alışık olduğunu anlamadım.


1

Liquid XML Studio, bir XML Şemasından örnek XML dosyaları oluşturacak bir XML Sample Generator sihirbazına sahiptir. Ortaya çıkan veriler şemaya uygun görünüyor (normal ifade kalıpları için veri oluşturamıyor).

XSD'den XML Örneği Oluşturma


0

OpenXSD kütüphane onlar XSD dayalı XML örnekleri oluşturmak için destek var bahseder. Kontrol et.


bir kullanım örneği gönderebilir misiniz?
naXa



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.