Как я могу получить следующий доступный узел в DOM со схемой? - PullRequest
0 голосов
/ 21 мая 2019

Мне нужно запросить имена «доступных» подэлементов узла элемента в DOM.

Например, если в схеме написано «В элементе person могут быть элементы возраста, имени, рода занятий». тогда я хочу функционировать так,

import org.w3c.dom.Element; 

Element person_element;

String[] names_of_available_sub_element = 
         get_available_sub_element_names(person_element);

, что составляет

names_of_available_sub_element == {"age", "name", "occupation"}. 

Как я могу реализовать эту функцию?

1 Ответ

0 голосов
/ 21 мая 2019

Это не легко, но это можно сделать, если вы готовы потратить много работы.

Существует несколько подходов к получению информации из схемы XSD.Вы можете попытаться обработать исходный код XSD, но я бы не рекомендовал этого, поскольку нужно учитывать очень много вещей (подстановочные знаки, группы подстановки, типы, полученные с помощью ограничений и расширений и т. Д.).Лучшим подходом является использование какого-либо API, который дает вам доступ к информации в переваренной форме.Для этого возможны следующие варианты:

(a) Xerces предоставляет вам Java API, обеспечивающий программный доступ к скомпилированной схеме.

(b) Saxon предоставляет вам две возможности: (i)Файл SCM, представляющий собой XML-представление скомпилированной схемы и (ii) API-интерфейс XPath, дающий программный доступ к скомпилированной схеме с использованием функций расширения.

Помните, что зная, что вы находитесь в элементе personнедостаточно (в общем случае), чтобы определить, какие разрешенные дети.Это потому, что могут быть глобальные и локальные элементы, использующие имя «человек», но разных типов.Является ли это проблемой в вашем случае, зависит от того, чего вы пытаетесь достичь, чего вы не очень подробно объяснили.

...