Как сгенерировать образцы XML-документов из их DTD или XSD?

Мы разрабатываем приложение, которое включает в себя значительное количество преобразований XML. Как таковых, у нас нет никаких надлежащих входных тестовых данных, только файлы DTD или XSD. Мы хотели бы сами сгенерировать наши тестовые данные из этих файлов. Есть ли простой / бесплатный способ сделать это?

Изменить

По-видимому, для этого нет бесплатных инструментов, и я согласен с тем, что OxygenXML - один из лучших инструментов для этого.


person lindelof    schedule 19.08.2008    source источник
comment
Я не вижу ответов на эти вопросы, которые не соответствуют формату вопросов и ответов, или прошу debate, arguments, polling, or extended discussion   -  person mjn    schedule 02.05.2013


Ответы (19)


Я думаю, что Oxygen (http://www.oxygenxml.com/) тоже делает это, но это еще один коммерческий продукт. Тем не менее, он хороший ... Я настоятельно рекомендую его всем, кто много работает с XML. Он также входит в хороший плагин Eclipse.

Я верю, что есть бесплатная полнофункциональная 30-дневная пробная версия.

person levand    schedule 26.08.2008
comment
У меня есть куча XSD, которые, в свою очередь, наследуют схемы от разных XSD, и мне нужно сгенерировать XML-файл для целей тестирования из этого XSD, я используюxygenXML для этого, но когда я пытаюсь это сделать, у меня это не работает и он говорит, пожалуйста, определите корневой узел, но не позволяет мне это сделать. Итак, если бы кто-нибудь работал сxygenXML, не могли бы вы предположить, что для этого можно было сделать? - person Rachel; 22.10.2009
comment
Спасибо leveland. Это тоже ответило на мой вопрос! Если вы хотите прийти, ответьте на мой вопрос: stackoverflow.com/questions/7041388/, я буду более чем счастлив отметить ваш ответ как ответ. - person Eric H; 12.08.2011

В Visual Studio 2008 SP1 и более поздних версиях XML Schema Explorer может создавать XML документ с некоторыми основными образцами данных:

  1. Откройте ваш XSD-документ
  2. Перейти в обозреватель XML-схем
  3. Щелкните правой кнопкой мыши корневой узел и выберите «Создать образец XML».

Снимок экрана проводника схемы XML

person Sam Warwick    schedule 03.09.2008
comment
да, это самый простой способ. Откройте XSD, переключитесь в проводник схемы XML, выберите корневой узел, щелкните правой кнопкой мыши и выберите «Создать образец XML». - person balint; 18.07.2009
comment
Я использовал это с VS2008, но я не могу найти это в VS2010. Кто-нибудь может подтвердить, что это все еще существует? - person Simon; 01.02.2013
comment
То же, что и Саймон: я тоже не могу найти это в VS2010. Согласно MSDN, он все еще должен быть там, но он просто не будет нигде в пользовательском интерфейсе ... :-( - person Martijn; 08.02.2013
comment
@Simon: вы получаете команду «Создать образец XML» только тогда, когда щелкаете правой кнопкой мыши один из элементов в проводнике схемы. Элементы изображены графически с помощью зеленых левой / правой угловых скобок: ‹›. Вы, вероятно, щелкаете тип правой кнопкой мыши, и сообщение сгенерирует его только для элементов (что имеет смысл). - person Miguel Sevilla; 08.04.2013
comment
XML Schema Explorer также отсутствует в Visual Studio 2013 для Интернета. Сообщество VS2013 имеет это. - person stefan; 17.06.2015
comment
Обратите внимание, что для этого вам нужен VS 2008 SP1. Я работал на ванильной VS 2008, и Обзор схемы XML не отображался в моем меню «Просмотр». После применения SP1 я смог открыть .xsd и автоматически отобразить представление схемы. - person osullivj; 27.01.2016
comment
Недоступно в Visual Studio Code (по состоянию на начало 2016 г.), но есть в сообществе Visual Studio 2015 для Windows. - person Eliot; 09.03.2016
comment
К сожалению, там, где в xsd есть xsd:choice, он выбирает только один, так что это довольно анемичный пример. - person Tim Abell; 07.07.2016
comment
@TimAbell, если это xsd:choice, тогда пример файла xml может содержать только один из этих вариантов. msdn.microsoft.com/en-us/library /ms256109(v=vs.110).aspx - person Davos; 28.04.2017
comment
Visual Studio Community 2017 по-прежнему имеет эту функцию. - person Rok T.; 25.08.2017
comment
@RokT. да, но он не может сгенерировать для меня действительный XML. В сгенерированном файле сразу появляется предупреждение. Очевидно, что значение -99 недопустимо для NonNegativeInteger ... - person MeanGreen; 10.01.2019

Для пользователей Intellij Idea:

Взгляните на Инструменты -> Действия XML

введите описание изображения здесь

Кажется, работает очень хорошо (насколько я тестировал).

Редактировать:

Как упомянул @naXa, теперь вы также можете щелкнуть правой кнопкой мыши файл XSD и выбрать «Создать XML-документ из схемы XSD ...»

person yamass    schedule 23.08.2012
comment
есть ли способ указать количество элементов для генерации (для последовательностей)? - person Nikita; 02.03.2013
comment
Я тестировал все решения этой темы, и это сработало лучше всего - person FLX; 22.09.2014
comment
Не работает для меня в последней версии RubyMine (v. 7.0, на основе Intellij Idea) с XSD с большим количеством операций импорта. У меня нет ничего, кроме сообщения об ошибке. - person Envek; 30.11.2014
comment
Ошибка компиляции схемы? - person The Red Pea; 22.03.2016
comment
В более новых версиях щелкните XSD правой кнопкой мыши и выберите «Создать XML-документ из схемы XSD ...». - person naXa; 05.01.2018
comment
Постоянно сообщает, что имя корневого элемента недействительно и ничего не делает, кнопка Ok неактивна. - person Czar; 24.09.2018

Camprocessor, доступный на Sourceforge.net, будет генерировать тестовые примеры xml для любого XSD. Доступно учебное пособие, которое покажет вам, как создавать собственные тестовые примеры, включая использование подсказок по содержанию для обеспечения реалистичных примеров, а не только случайного мусора.

Учебник доступен здесь: http://www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf

И дополнительную информацию об этом инструменте, который использует стандарт OASIS Content Assembly Mechanism (CAM) для преобразования вашего XSD в более дружественную XSLT структуру, можно найти на веб-сайте ресурсов - http://www.jcam.org.uk

Наслаждайтесь, DW

person Community    schedule 10.11.2008
comment
Прямая ссылка на загрузку Sourceforge.net: sourceforge.net/projects/camprocessor - person ; 10.11.2008
comment
@Pyderman - это ваши настройки - посмотрите, как их изменить. - person Ghoti; 30.03.2017

Вы можете использовать генератор экземпляров XML, который является частью Sun / Oracle Multi-Schema Validator.

В README.txt говорится:

Sun XML Generator - это инструмент Java для создания различных экземпляров XML из нескольких типов схем. Он поддерживает DTD, пространство имен RELAX, RELAX Core, TREX и подмножество W3C XML Schema Part 1. [...]

Это инструмент командной строки, который может создавать как действительные, так и недопустимые экземпляры из схем. Его можно использовать для создания тестовых примеров для приложений XML, которые должны соответствовать определенной схеме.

Загрузите и распакуйте xmlgen.zip со страницы загрузки msv и выполните следующую команду, чтобы получить подробные инструкции по использованию:

java -jar xmlgen.jar -help

Похоже, что инструмент выпущен под лицензией BSD; исходный код доступен здесь

person falko    schedule 17.12.2008
comment
Очень хорошо! Хотя немного ограничено. Я попробовал это на XSD, который импортирует другой XSD, и это не удалось. Но на DTD это работает очень хорошо. Спасибо! - person lindelof; 15.01.2009
comment
Текущие ссылки: домашняя страница, загрузки. xmlgen.zip только в nigthly каталоге. Подтверждаю невозможность сгенерировать образец с моего xsd. - person Jarekczek; 07.09.2012
comment
В моем случае необходимо было использовать файл --example для хранения токенов, которые можно использовать для создания нового файла образца. Для изготовления образца требуется образец! Нелегко... - person The Red Pea; 23.03.2016
comment
Ссылки java.net в основном мертвы. - person RedGrittyBrick; 17.10.2017

XMLSpy сделает это за вас, хотя это и платно ...

Я считаю, что Liquid Xml Studio делает это за вас и является бесплатным, но я еще не лично использовал его для создания тестовых данных.

person SCdF    schedule 19.08.2008
comment
Он что-то генерирует, но у вас нет особого контроля над этим: вы можете выбрать элемент верхнего уровня и некоторые общие параметры, но вы не можете использовать XMLSpy для создания набора тестовых наборов с множеством вариантов и т. Д. - person Hans-Peter Störr; 23.12.2008
comment
XMLSpy выглядел хорошо, но сгенерировал xml, который затем не прошел проверку на xsd, который использовался для его создания. Неудача. Он также заблокировал поле postiveinteger - вместо этого вставил *ERROR* - person Tim Abell; 07.07.2016

Похоже, что пока никто не смог ответить на вопрос :)

Я использую EclipseLink MOXy для динамического создания классов привязки, а затем рекурсивно просматриваю связанные типы. Это несколько тяжеловато, но позволяет вводить значения XPath после создания экземпляра дерева объектов:

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 - довольно простой рекурсивный метод:

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");
        }
    }

Преобразовать все в XML довольно просто:

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
person Michal Rames    schedule 02.06.2011

Вы также можете использовать XMLPad (бесплатный), который можно найти здесь http://www.wmhelp.com для создания вашего xml образцы. Из меню: XSD -> создать образец XML-файла.

person Pat B    schedule 06.06.2012
comment
Я получаю переполнение стека или WMHelp XmlPad перестает работать, когда я выбираю «Создать образец данных». - person The Red Pea; 22.03.2016

Microsoft опубликовала инструмент «генератор документов» в качестве образца. Это статья, в которой описывается архитектура и работа примера приложения в некоторая деталь.

Если вы просто хотите запустить инструмент создания образца, щелкните здесь и установите MSI.

Это бесплатно. Источник доступен. Для работы требуется .NET Framework. Работает только с XSD. (не Relax NG или DTD).

person Community    schedule 08.04.2009
comment
Выше ссылка на статью в MSDN под названием «Создание XML-документов из XML-схем». - person Sam Warwick; 21.05.2009
comment
Программа установки загрузит на ваш компьютер кучу кода C #. Просто загрузите их в LinqPad, и у вас будет бесплатный генератор экземпляров XML. Да да! - person Sean Kearon; 16.02.2011
comment
Спустя 9 лет это все еще отлично работает для XSD. - person Mikanikal; 25.09.2018

XML-XIG: генератор экземпляров XML

http://xml-xig.sourceforge.net/

Этот открытый исходный код был бы полезен.

person rolandpeng    schedule 25.02.2011
comment
Не очень удобный. Выдает много исключений, не может заставить его работать после необъяснимого NullPointerException. - person Jarekczek; 07.09.2012

В Microsoft Office есть InfoPath, который принимает XSD в качестве импорта и позволяет быстро и легко определить редактор на основе форм для создания файлов XML. Он имеет два режима: в одном вы определяете форму, а в другом вы создаете XML-файл, заполнив форму. Я считаю, что он впервые появился в Office 2003, и большинство людей никогда его не устанавливают. Меня шокирует, насколько мне это нравится.

person Kieveli    schedule 21.05.2009

XMLBlueprint 7.5 может делать следующее: - генерировать образец xml из dtd - генерировать образец xml из схемы Relax ng - генерировать образец xml из схемы xml

person Peter    schedule 12.03.2010

Версия SoapUI с открытым исходным кодом может генерировать запросы SOAP из WSDL (который содержит определения типов XSD), поэтому выглядит так: есть реализация этой функции с открытым исходным кодом. К сожалению, я не понял, какая библиотека для этого используется.

person otto.poellath    schedule 26.11.2010

В Liquid XML Studio есть мастер XML Sample Generator, который будет создавать образцы XML-файлов из Схема XML. Полученные данные, похоже, соответствуют схеме (они просто не могут генерировать данные для шаблонов регулярных выражений).

 Создать образец XML из XSD

person Sprotty    schedule 06.08.2010

В библиотеке OpenXSD упоминается, что они поддерживают создание экземпляров XML на основе XSD. Проверь это.

person Aravind Yarram    schedule 19.12.2011
comment
не могли бы вы опубликовать пример использования? - person naXa; 05.01.2018

Для полноты я добавлю http://code.google.com/p/jlibs/wiki/XSInstance, который упоминался в аналогичном (но специфичном для Java) вопросе: Любой Java API для генерации образца XML из XSD?

person MarnixKlooster ReinstateMonica    schedule 15.05.2012
comment
Я попробовал это и запустил, как было предложено: xsd-instance.sh purchase-order.xsd {http://jlibs.org}PurchaseOrder Получена ошибка: Error: Unable to initialize main class jlibs.xml.xsd.XSInstance Caused by: java.lang.NoClassDefFoundError: org/apache/xerces/xs/XSObject - person ka3ak; 06.02.2021

XML Blueprint также делает то же самое; инструкции здесь

http://www.xmlblueprint.com/help/html/topic_170.htm

Это не бесплатно, но есть 10-дневная бесплатная пробная версия; кажется быстрым и эффективным; к сожалению, это только Windows.

person Bambax    schedule 14.10.2012

Также существует http://xsd2xml.com/, онлайн-генератор XSD в XML.

person Sphinxxx    schedule 16.06.2018
comment
К сожалению, он не сгенерировал действительный XML из XSD. Однако другие инструменты не справились с этой задачей - Eclipse, Intellij IDEA и даже XMLSpy. Лучшее, что я нашел до сих пор, - это liquid-technologies.com/online. -xsd-to-xml-converter Но даже этот не может сгенерировать действительный XML, если в XSD есть шаблоны. - person ka3ak; 06.02.2021

person    schedule
comment
Спасибо! Eclipse бесплатен, и это было идеальное решение. - person Akku; 26.01.2011
comment
Вы, ребята, случайно не знаете, какая функция Eclipse предоставляет эту функциональность? Подменю My Generate содержит только классы JAXB. - person otto.poellath; 10.03.2011
comment
Вам необходимо установить проект Web Tools (см. Раздел «Справка» - ›« Установка нового программного обеспечения »), чтобы получить эти возможности. - person pwaring; 13.05.2011
comment
Eclipse кажется хорошим вариантом, но мне не удалось заставить поколение следовать импортированным XSD. Например, если бы у меня был XSD, описывающий 3 элемента, и один из них был complexType, который был определен в ссылочном / импортированном XSD, он не сгенерировался бы для этого элемента. Любые идеи? - person David Hergert; 16.12.2011
comment
@DavidHergert Простым обходным решением было бы создание заглушки. - person Adam Matan; 30.04.2013
comment
Флориан - Спасибо. Это сэкономило мне 4 часа на итерациях «угадать-компилировать-исправить» xmlbeans. - person Adam Matan; 30.04.2013
comment
Я предпочитаю это методу Visual Studio с более высоким рейтингом, так как у него больше возможностей. (Visual Studio сгенерировала мне очень скудный XML-файл, в котором для nillable установлено значение nil, тогда как Eclipse дал мне возможность заполнить эти элементы.) Один незначительный вопрос - нужно ли размещать XSD-файл где-нибудь в рабочей области? Я надеялся, что смогу сделать это через Open File ... для любого файла на моем компьютере или в сети, не копируя его в рабочую область, но не мог найти способ. - person Steve Chambers; 01.05.2013
comment
Я считаю Eclipse лучшим! - person Christian Vielma; 01.05.2013