2011-11-24 26 views
0

我使用撒克遜EE 9.3.0.4的XSL轉換,發現當<xsl:result-document>是內部<xsl:attribute>使用(以及<xsl:namespace><xsl:processing-instruction>)指令,處理器 引發XTDE1480錯誤 - 不能切換到最終結果的目的地,而寫作臨時樹爲什麼xsl:result-document在<xsl:attribute>指令內失敗?

<xsl:attribute name="a"> 
    <xsl:result-document href="result.xml" > - error here 
     test 
    </xsl:result-document> 
</xsl:attribute> 

根據specification(附錄d)允許父母<xsl:result-document>是:

  • 任何XSLT元素,它的內容模型序列構造
  • 任何文字結果元素

是,這是錯誤的撒克遜人或限制爲<xsl:result-document>使用,未在規範中定義的?

更新: 我認爲,這是不使用<xsl:result-document><xsl:attribute>一個好主意,但爲什麼錯誤發生?

感謝

+1

@Vincent Biragnet提供了一個很好的解釋。除此之外,使用''來產生一個屬性的值是沒有意義的。按照規範,''的內容必須是序列構造函數。另一方面,''不是序列構造函數。因此,不管錯誤消息如何,在''內放置一個''是錯誤的。 'xsl:result-document'產生一個最終結果樹。根據規範:[定義:最終結果樹形成最終輸出的一部分。在樣式表中不可訪問。] –

回答

2

在規範,你可以閱讀:

在初始模板的說明在最終輸出 狀態進行評估。除了xsl:variable,xsl:param, xsl:with-param,xsl:attribute,xsl:comment, xsl:處理指令,xsl:命名空間之外,與其調用指令 相同的輸出狀態評估指令,xsl:value-of,xsl:function, xsl:key,xsl:sort和xsl:message始終以臨時輸出狀態評估其包含的序列構造函數 中的指令。

了xsl:在最後的樹結果的結果文檔編寫,並給予上述規則,我明白,這是試圖在最後的樹結果書面方式錯誤時,裏面的下列元素

xsl:variable,xsl:param,xsl:with-param,xsl:attribute,xsl:comment,xsl:processing-instruction,xsl:namespace,xsl:value-of,xsl:function,xsl:key,xsl:sort ,和xsl:消息

+0

是,* result-document *不是序列構造函數(與所有其他指令一樣),但可以位於任何指令內部,其內容是序列構造函數。 [定義:序列構造器是樣式表中可以評估爲返回一系列節點和原子值的一系列零個或多個兄弟節點。使用結果序列的方式取決於包含指令。] – Vitaliy

+0

對,我錯過了這個觀點,並在你的評論之後重寫了我的答案。 –

+0

+1 - 然後它有道理爲什麼會引發錯誤,謝謝 – Vitaliy