问题描述
我正在尝试使用 XSD
解析 Apache XMLSchema Core
。我能够解析该文件并将 Parent
及其 Child Element
信息存储在 HashMap
中。
每个 Child
元素都存储在 XmlSchemaElement
类型中,该类型还包含该子元素的 Parent
信息。当我尝试查看与子元素相关的信息时,它会为所有元素显示 Root
元素,而不是其直接父元素。
例如:在我的 XSD
中,RestaurantMenu
是 Root
元素,其直接子元素是 Food
。此外,Food
有子元素 name
、price
、calories
等。当我看到 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));
元素:Children
、name
、price
、calories
、description
。然后我试图查看元素之一的父元素,即 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 declaration
或 element reference
。通常,这两者都可以有多个父元素声明,因为它们可以在全局复杂类型中声明。如果多个元素声明使用了该全局复杂类型定义,那么您的“子元素”将有多个可能的父元素。
在 Java 中的 Apache XMLSchema Core
库上工作一段时间后,以下是我的观察。
无法直接使用库获取直接父元素,您可以从 XmlSchemaElement 获取与当前元素及其子元素相关的信息。