2011-07-12 28 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結構中的元素。