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

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

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

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

Ответы [ 19 ]

174 голосов
/ 03 сентября 2008

В Visual Studio 2008 с пакетом обновления 1 (SP1) и более поздних версиях Проводник XML-схемы может создавать XML-документ с некоторыми основными примерами данных:

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

Screenshot of the XML Schema Explorer

123 голосов
/ 17 июля 2009

В последних версиях бесплатной и с открытым исходным кодом Eclipse IDE вы можете создавать документы XML из файлов DTD и XSD. Щелкните правой кнопкой мыши по файлу * .dtd или * .xsd и выберите «Создать -> Файл XML ...». Вы можете выбрать, какой корневой элемент генерировать и следует ли создавать дополнительные атрибуты и элементы.

Конечно, вы можете использовать Eclipse для создания и редактирования файлов вашей схемы DTD и XSD. И вам не нужно устанавливать какие-либо плагины. Входит в стандартную поставку.

29 голосов
/ 23 августа 2012

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

Посмотрите на Инструменты -> Действия XML

enter image description here

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

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

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

28 голосов
/ 26 августа 2008

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

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

12 голосов
/ 10 ноября 2008

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

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

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

Наслаждайся, DW

10 голосов
/ 17 декабря 2008

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

Это README.txt заявляет:

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

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

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

java -jar xmlgen.jar -help

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

9 голосов
/ 20 августа 2008

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

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

7 голосов
/ 02 июня 2011

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

Я использую MOXy EclipseLink, чтобы динамически генерировать классы привязки, а затем рекурсивно проходить связанные типы. Это несколько тяжело, но позволяет вводить значения 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);
7 голосов
/ 06 июня 2012

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

5 голосов
/ 25 февраля 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...