2010-05-12 89 views
1

是否可以檢查元素ComplexType?XSLT類型檢查

我有此(簡化):

complexType Record 
complexType Customer extension of Record 
complexType Person extension of Record 

<xsl:template match="/"> 
    <records> 
    <xsl:apply-templates /> 
    </records> 
</xsl:template> 

<xsl:template match="!!! TYPECHECK FOR RECORD !!!" name="Record"> 
    <record><xsl:value-of select="." /></record> 
</xsl:template> 

是能夠檢查elementstype含。的傳承?

我不知道元素名稱只是他們是Record的子類型。

schema 1: 
    complexType name="Customer" 
     extension base="Record" 

    element name="customers" 
     element name="customer" type="Customer" 

schema 2: 
    complexType name="Person" 
     extension base="Record" 

    element name="persons" 
     element name="person" type="Person" 

schema ?: 
    complexType name="UnknownType" 
     extension base="Record" 

    element name="unknowns" 
     element name="unknown" type="UnknownType" 

xml 1: 
<customers> 
    <customer /> 
    <customer /> 
</customers> 

xml 2: 
<persons> 
    <person /> 
    <person /> 
</persons> 

xml ?: 
<?s> 
    <? /> 
    <? /> 
</?s> 

XML輸入IST定製,所以我必須通過(我認爲)類型

+0

很好的問題(1)。查看我的答案以獲得解決方案。 :) – 2010-05-12 13:28:44

回答

0

我不知道你的意思相匹配。

不同的類型有不同的標籤名稱,在xslt中你應該看看那些來決定節點是什麼類型。

確保節點確實具有您的邏輯規定的結構不是xslt任務。在將其傳遞給xslt處理器以實現此目的之前,應該根據模式驗證文檔。

編輯

我仍然不知道,但好像我的this question可能有一定的幫助。

+0

元素名稱未綁定到該類型,它只是樹中的一個表示: complexType name =「Record」... element name =「x」type =「Record」, element name =「y 「type =」記錄「。 都是記錄。 在我的情況下,我不能使用元素名稱,因爲我不知道它。 – 2010-05-12 10:12:27

+0

在我們理解你所問的內容之前,你可能需要發佈你的實際XML。坦率地說,我迷失了。 – 2010-05-12 10:22:51

+0

還不確定,但請訪問該鏈接,看看它是否有幫助。 – GSerg 2010-05-12 13:16:03

1

在XPath 2.0(這意味着XSLT 2.0),可以使用操作者instance-of

. instance-of element(*, my:Record)