Apache XMLSchema 核心 XSD/XML 解析器将根元素显示为所有子元素的父元素,而不是其直接父元素

问题描述

我正在尝试使用 XSD 解析 Apache XMLSchema Core。我能够解析该文件并将 Parent 及其 Child Element 信息存储在 HashMap 中。

每个 Child 元素都存储在 XmlSchemaElement 类型中,该类型还包含该子元素的 Parent 信息。当我尝试查看与子元素相关的信息时,它会为所有元素显示 Root 元素,而不是其直接父元素。

例如:在我的 XSD 中,RestaurantMenuRoot 元素,其直接子元素是 Food。此外,Food 有子元素 namepricecalories 等。当我看到 name 的父元素时,我希望它是 {{1} } 因为那是直接的父级,但在 Food 期间将 Debug 显示为它的父级,这有点令人困惑。

我想知道如何获取与每个元素的直接父元素相关的信息。

以下是我的 RestaurantMenu 文件

XSD

以下是我使用 <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="RestaurantMenu"> <xs:complexType> <xs:sequence> <xs:element name="food" maxOccurs="5" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element type="xs:string" name="name" /> <xs:element type="xs:string" name="price" /> <xs:element type="xs:string" name="description" /> <xs:element type="xs:short" name="calories" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> 编写的代码: 我正在尝试Apache XmlSchema Core XML Parser

Debug

以上代码将返回食物的所有List<XmlSchemaElement> childElements = getElementType(new QName("food")); System.out.println(childElements.get(0)); 元素:Childrennamepricecaloriesdescription。然后我试图查看元素之一的父元素,即 ingredients。以下是我采用的调试路径:

name

在这childElements -> [0] -> namedDelegate -> parentSchema -> items -> [0] -> namedDelegate -> qName. 中,我期望 qName 是我的直接父级,但我得到了 food,它是我的 RestaurantMenu xsd 元素。

请在下面找到完整的代码

Root

解决方法

免责声明:我不是 XSModel 方面的专家,但很久以前我确实使用过一次。

XSModel 是 XSD 中几乎所有内容的完整记录。因此,它确实包含您正在寻找的信息。认识到 XSModel 是为了验证 XML 文档而创建的,这可能会有所帮助 - 它从来没有打算成为 XSD 模型的通用内存表示。如果这就是您所需要的,那么您可能会更好地使用 Eclipse XSD model。无论哪种方式,加载和操作 XSD 模型都是一项少数运动,您不应期望 API 得到完美记录。

您能否帮助我找到 Apache XMLSchema 核心库中子元素的直接父元素。

当您谈到“子元素”时,我认为您指的是 local element declarationelement reference。通常,这两者都可以有多个父元素声明,因为它们可以在全局复杂类型中声明。如果多个元素声明使用了该全局复杂类型定义,那么您的“子元素”将有多个可能的父元素。

,

在 Java 中的 Apache XMLSchema Core 库上工作一段时间后,以下是我的观察。

无法直接使用库获取直接父元素,您可以从 XmlSchemaElement 获取与当前元素及其子元素相关的信息。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...