2017-02-16 12 views
1

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

Что-то вроде этого:

enter image description here

Когда я правой кнопкой мыши на корневой элемент «breakfast_menu», контекстное меню всплывает и дает мне возможность добавить новый элемент пищи для него. Новый генерируемый пищевой элемент должен иметь уже добавленные к нему все вспомогательные элементы/атрибуты, которые связаны с ним (имя, цена и т. Д., Как определено в XSD). Это сложная часть.

Я немного поиграл с XSModel, что позволяет мне проверять определение элементов, как определено в файле XSD. Я не совсем уверен, в какой степени. Это очень громоздко.

Есть ли более простой способ выполнить это? В идеале мне нужна библиотека, в которой я могу указать, какой конкретный дочерний элемент в XSD мне нужно создать, и он будет создавать объекты org.w3c.dom. * (Или что-то подобное), которые я могу добавить в свое дерево узлов.

Я видел решения, которые генерируют целые xml-файлы из xsd, но наиболее часто используемый xml не содержит всех элементов, которые являются родительскими элементами, не содержат дочерние элементы, для которых minOccurs = "0" определены. Это те детские элементы, которые мне нужны.

+2

Вам действительно нужно создать движок intellisense, поэтому сначала вам нужно выяснить, где вы находитесь в XML-файле, тогда вам нужно согласовать это с вашей позицией в XSD, тогда вам нужно выяснить, что возможно, учитывая ваши местоположение и состояние в XSD. Это дополнительно осложняется группами xsi: type и substitutionGroups. Если вы напишете это с нуля, это большой шаг, я предлагаю попытаться извлечь какой-то код intellisense из текстового редактора и адаптировать его, или положить несколько недель в сторону и загрузить кофеварку. – Sprotty

ответ

0

Итак, я узнал о org.apache.xmlbeans.

Это очень хорошо документировано (в отличие от org.apache.xerces, с которым было больно работать).

Я могу использовать xmlbeans's SchemaType, чтобы извлечь информацию типа xml из файла xsd и вручную создать org.w3c.dom.Nodes для моего JTable.