如何使用架构获取 DOM 中的下一个可用节点?

How can I get next available node in DOM with schema?

我需要查询DOM中元素节点的"available"个子元素的名称。

例如,如果架构说 "There can be age, name, occupation elements under person element." 那么我想像这样运行,

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"}. 

如何实现这个功能?

这并不容易,但如果您愿意投入大量工作,就可以做到。

有多种方法可以从 XSD 模式中获取信息。您可以尝试处理 XSD 源代码,但我不建议这样做,因为您必须考虑很多事情(通配符、替换组、通过限制和扩展派生的类型,等等) ).更好的方法是使用某种 API,让您可以访问摘要形式的信息。为此,一些可能的建议是:

(a) Xerces 为您提供 Java API 提供对已编译模式的编程访问。

(b) Saxon 为您提供两种可能性:(i) SCM 文件,它是已编译模式的 XML 表示,以及 (ii) XPath API 提供编程访问使用扩展函数的编译模式。

请记住,知道您在 "person" 元素处(在一般情况下)不足以确定允许的子元素是什么。那是因为可以有使用名称 "person" 但具有不同类型的全局和局部元素。在你的情况下这是否是一个问题取决于你想要实现的目标,你没有真正详细解释。