我需要查询 DOM 中元素节点的“可用”子元素的名称。
例如,如果架构显示“人员元素下可以有年龄、姓名、职业元素。”然后我想像这样运行,
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”但具有不同类型的全局和局部元素。这对于您的情况是否是一个问题取决于您想要实现的目标,而您还没有真正详细地解释过这一点。
关于java - 如何使用模式获取 DOM 中的下一个可用节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56232844/