我需要查询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"}.
如何实现此功能?
答案 0 :(得分:0)
这并不容易,但是如果您准备投入大量工作,可以做到这一点。
有许多方法可以从XSD架构中获取信息。您可以尝试处理XSD源代码,但我不建议您这样做,因为您必须考虑很多事情(通配符,替换组,由限制和扩展派生的类型,等等)。更好的方法是使用某种API,该API可让您以摘要形式访问信息。为此,一些可能的建议是:
(a)Xerces提供了Java API,可提供对已编译模式的编程访问。
(b)Saxon为您提供两种可能性:(i)SCM文件,它是编译模式的XML表示,以及(ii)XPath API,使用扩展功能以编程方式访问编译后的模式。
请记住,仅在一般情况下,知道您处于“人物”元素是不足以确定允许的孩子是什么。这是因为可以使用名称“ person”来存在全局和局部元素,但是类型不同。对于您而言,这是否是一个问题取决于您要实现的目标,而您实际上并没有对此进行详细解释。