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

时间:2019-05-21 07:05:18

标签: java xml dom xsd xerces

我需要查询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 :(得分:0)

这并不容易,但是如果您准备投入大量工作,可以做到这一点。

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

(a)Xerces提供了Java API,可提供对已编译模式的编程访问。

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

请记住,仅在一般情况下,知道您处于“人物”元素是不足以确定允许的孩子是什么。这是因为可以使用名称“ person”来存在全局和局部元素,但是类型不同。对于您而言,这是否是一个问题取决于您要实现的目标,而您实际上并没有对此进行详细解释。