java - 如何使用模式获取 DOM 中的下一个可用节点?

标签 java xml dom xsd xerces

我需要查询 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/

相关文章:

java - 编译时找不到符号方法?

java - 内存缓存和性能

java - 如何检查查询是否在 firebase 数据库中返回了某些内容?

java - 无法在模拟器和设备上加载 Android Mapview Activity

php - DomDocument 解析换行符适用于 span 但不适用于 img

java - Neo4j java驱动线程数管理

c# - 如何配置 Web API XML 序列化程序以序列化所有类的只读属性?

javascript - 如何在 jQuery (Javascript) 中从 XML 生成 XML?

javascript - 您可以实例化 Element 对象并同时定义属性吗?

java - 如何从 Tapestry 5 中的 DOM 元素获取文本值