【问题标题】:Convert XSD to tree structure with Java使用 Java 将 XSD 转换为树结构
【发布时间】:2011-07-12 12:50:53
【问题描述】:

我想为 XML 模式生成文档。

我的目标是分析 xsd 文件并将其显示为树结构(解析所有复杂/匿名类型)。此外,我需要用它们的基数(由模式定义)注释该树中的所有项目。

下面的小例子可能有助于澄清我的问题。

a) xsd 文件:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="client" type="clientType" />
    <xs:complexType name="clientType">
        <xs:sequence minOccurs="1" maxOccurs="1">
            <xs:element name="first_name"/>
            <xs:element name="last_name"/>
            <xs:element name="address" type="addressType" 
                        minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="addressType">
        <xs:sequence>
            <xs:element name="street"/>
            <xs:element name="number" minOccurs="0" maxOccurs="1"/>
            <xs:element name="city"/>
            <xs:element name="zipcode"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

b) 我想看到的输出:

client [1]
  first_name [1]
  last_name [1]
  address [1..n]
    street [1]
    number [0..1]
    city [1]
    zipcode [1]

有人知道这个问题的基于 java 的解决方案吗?最好基于Eclipse Schema Infoset,但我也很乐意使用其他库。

【问题讨论】:

    标签: java xsd


    【解决方案1】:

    XSOM 可以将 XSD 规范化为可理解的数据结构,您可以循环并打印出来。

    【讨论】:

      【解决方案2】:

      鉴于 XSD 架构也是 XML,您可以将其作为 XML 进行处理,为您提供多种选择。

      我的偏好是使用带有模板的 XSLT 样式表来匹配元素和复杂类型元素以获取输出列表,并使用更多模板来匹配 minOccurs 和 maxOccurs 属性以获取您的基数。

      可能已经在网上提供了用于执行此操作的样式表示例。

      【讨论】:

      • 如何使用 XSLT 解析匿名/复杂类型的内容?你有这方面的例子吗?
      【解决方案3】:

      虽然没有合适的解决方案,但我会提出以下建议:使用能够基于 XSD 生成示例 XML 实例的工具,例如eclipse IDE(因为它是开源的,应该可以提取相关代码并在独立解决方案中使用它)。此 XML 应该非常接近您需要的树结构。然后,解析 XSD 并使用基数对生成的 XML 结构中的元素进行注释。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-27
        • 2021-08-07
        • 2022-01-01
        • 2017-10-01
        • 1970-01-01
        • 2018-09-04
        相关资源
        最近更新 更多