2013-02-06 29 views
2

我有一個XSLT樣式表,它以XML形式生成一些輸出。我想用另一個樣式表處理輸出。有沒有辦法告訴後者的樣式表「運行並使用」前者的結果?處理另一個XSLT樣式表的輸出

回答

2

沒有,據我所知,告訴XSLT處理器的標準方式來運行給另一個樣式表輸入並做輸出。在某些情況下,你可以處理針對一組模板的輸入,並將結果保存在變量中,然後應用一組不同的模板變量的值,這樣的事情:

<xsl:template match="/"> 
    <xsl:variable name="temp"> 
    <xsl:apply-templates mode="first-pass"/> 
    </xsl:variable> 
    <xsl:apply-templates select="$temp" mode="second-pass"/> 
</xsl:template> 

這是假設你」重新運行XSLT 2.0。在XSLT 1.0中,你將需要一個支持節點集擴展的處理器(很多),你需要將引用改爲$ temp,像exslt:nodeset($ temp)。

正如您會意識到的那樣,如果您的兩個樣式表都使用默認模式並且對重疊的元素類型進行操作,那麼這將不會很好地工作。因此,一些XSLT處理器添加了擴展以提供您描述的功能類型(例如,請參閱討論Xalan管道:pipeDocument擴展元素)。

當然,您也可以在XSLT之外處理管道。最簡單的方法取決於您正在運行的環境。

如果您從操作系統shell運行XSLT,並且您的XSLT處理器接受stdin上的輸入,則可以將輸出從一個樣式表導入另一個樣式表:

xsltproc a.xsl in.xml | xsltproc b.xsl - > out.xml 

隨着穆罕默德衛生部已經指出的那樣,許多腳本環境使人們有可能做類似的事情:他提到PHP,當然還有XPROC。

0

是的你可以。您必須將源節點轉換爲DOMDocument我不知道什麼是您的編程語言。在PHP實例是transformToDoc()變換後,您可以運行一個新的XSLT樣式表在DOM文檔輸出