2016-08-30 21 views
1

我是使用XSLT的初學者,因此我不確定這是否可行。我非常感謝你的幫助。在XSLT文件中引用XSD並匹配元素名稱以獲取元素類型

XSLT將從一種格式轉換爲另一種格式。 源XML沒有該類型。

我需要引用XSD來獲取給定元素的類型。

<match="*[not(*)]"> 
    <elementName> 
     <key> 
     <xsl:value-of select="name()"/> 
     </key> 
     <type> 
     if (name() matches name =id in xsd file" 
     // if name = id matches name = id in xsd get type=String 

     <type> 

這是樣品XSD:

<xs:complexType name = "test"> 
    <xs:sequence 
    <xs:element name="id" type="xs:string"/> 
    </xs:sequence> 
    </xscomplexType> 
+0

你的問題太馬虎了,不能回答。請發佈**完整的XML,XSLT和XSD示例 - 請參閱:[mcve]。 - 同時說明您的XSLT處理器是否支持XSLT 2.0。 –

回答

1

使用XSLT 2.0模式感知的改造,你可以寫:

<xsl:import-schema> 
    ... schema goes here, either inline or by reference ... 
</xsl:import-schema> 

<xsl:template match="element(id, xs:string)"> 
    ... 
</xsl:template> 

使用這種的方式,一般假定你寫你的樣式表知道模式中的內容。撒克遜通過擴展功能擴展了這一功能,可以讓您發現模式中的內容。例如:

<xsl:variable name="type" select="saxon:type-annotation()"/> 
<key><xsl:value-of select="name()"/></key> 
<type>Q{<xsl:value-of select="namespace-from-QName($p)||"}"||local-name-from-QName($type)"/></type> 

見撒克遜:類型,註釋和薩克森:架構擴展功能在http://www.saxonica.com/documentation/index.html#!functions/saxon

分析從XSLT模式文檔直接是可能的理論,但它的工作的一個巨大的量來得到它對,如果你要處理諸如xs:include/import/redefine,命名類型和匿名類型,全局和本地元素聲明,替換組等等。

另一種方法是分析可以從Saxon輸出的XML格式(SCM)中的「預編譯模式」,這消除了許多o這些困難。

其他產品還提供訪問架構的API,但沒有真正的標準。