2011-07-12 26 views
5

我想为XML模式生成文档。使用Java将XSD转换为树结构

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

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

一)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,但我很乐意使用其他库。

回答

0

鉴于XSD架构也是XML,您可以将其作为XML进行处理,从而为您提供许多选项以供您使用。

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

这样做的样式表示例可能已经在网上提供。

+0

如何使用XSLT解析匿名/复杂类型的内容?你有这样的例子吗? –

1

XSOM可以将XSD标准化为可循环和打印出来的易理解数据结构。

0

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