2017-01-27 30 views
0

我想將下面的結構中的xml文件轉換爲與此非常相似的另一個文件,假設每個元素名稱都發生了變化(即A..F-> ANew..FNew)。我想用XSLT 3.0使用Saxon-EE v9.7引入的流式傳輸模式來實現,因爲我需要處理非常大的文件。儘管我可以部分地接受它(Root/Head部分),但由於我無法滿足Saxon-EE適用的流播規則並且我迷失在其中,所以我無法提出完全解決整個文檔的解決方案......我很欣賞任何xslt建議這將在Saxon-EE v9.7的流媒體模式下工作。如何創建流式XSLT轉換?

<Root> 
    <Head> 
    <A/> 
    <B/> 
    </Head> 
    <Grp> 
    <D/> 
    <E/> 
    <SubGrp> 
     <E/> 
     <F/> 
    </SubGrp> 
    <SubGrp> 
     <E/> 
     <F/> 
    </SubGrp> 
    </Grp> 
    <Grp> 
    <D/> 
    <E/> 
    <SubGrp> 
     <E/> 
     <F/> 
    </SubGrp> 
    <SubGrp> 
     <E/> 
     <F/> 
    </SubGrp> 
    </Grp> 
</Root> 
+0

我明白,要使流式轉換工作起來可能非常棘手。但是,在SO格式下進行的最好方式是讓您向我們展示一種以明確和可重現的方式失敗的嘗試,然後我們可以幫助您克服該特定障礙。另請注意,如果您購買了Saxon-EE許可證,那麼您有直接支持Saxonica的途徑:我們不介意使用StackOverflow,但如果您使用Saxonica自己的支持渠道,那麼我們將努力追蹤解決問題的方案。 –

回答

0

如果使用

<xsl:mode streamable="yes" on-no-match="shallow-copy"/> 

爲出發點的話,如果你需要的是重新命名一些元素,你就可以添加模板這樣做,例如

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

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

如果您仍有問題,請向我們展示您的XSLT以及Saxon給您的準確錯誤消息。