我試圖在谷歌上尋找答案,但我得到的結果是或者如何替換字符串或替換子字符串等,但我的問題是稍有不同。是否可以替換/替換傳入的XSL數據?
說我有一個現有XSL模板,說「你好世界」,即處理「數據/記錄/記錄」,但我不能修改你好世界,所以我想創造的一個包裝模板,它會按照/修改每個記錄中的數據,然後傳遞給hello-world ...有沒有辦法做到這一點?
到目前爲止,我已經成功地創建一個能夠過濾掉重複記錄的功能,我想用新的替換裏面的「數據/記錄/ *」的所有記錄的...
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:call-template name="get-unique-record">
<xsl:with-param name="records" select="/data/records/record"/>
</xsl:call-template>
</xsl:template>
<!-- This function will filter out the given records and return a unique set of records -->
<xsl:key name="kField_ID" match="field[@name='ID']" use="."/>
<xsl:template name="get-unique-record">
<xsl:param name="records"/>
<xsl:for-each select="$records">
<xsl:variable name="record" select="."/>
<xsl:if test="$record//field[generate-id() = generate-id(key('kField_ID', .))]">
<xsl:copy-of select="$record"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
現在...是有可能做這樣的事情:
<xsl:variable name="/data/records/record">
<xsl:call-template name="get-unique-record">
<xsl:with-param name="records" select="/data/records/record"/>
</xsl:call-template>
</xsl:variable>
編輯:@LasrH,感謝您的快速回復。有沒有辦法複製現有的「/」,然後將所有/ data/records/record替換爲已過濾的?
EDIT2:@LasrH,我創建了幾個模板來修改和重建「數據」節點。是否有可能使用節點集來將現有輸入與我的新數據「替換」爲輸入?
<xsl:variable name="data">
<xsl:call-template name="rebuild-data-with-record">
<xsl:with-param name="records">
<xsl:copy-of select="$unique-records"></xsl:copy-of>
</xsl:with-param>
</xsl:call-template>
</xsl:variable>
再往我試圖使用節點設置是這樣的:
<xsl:apply-templates select="exslt:node-set($data)/data"/>
但它看起來不像是做什麼的?有沒有拋出任何錯誤。
看起來像你的意思是「模板」而不是「功能」。 – LarsH 2012-07-17 20:55:09
固定,是的,我是一個C/Java程序員哈哈,只是開始研究XSL。對不起,不好的術語。更新了文字。 :) – codenamezero 2012-07-17 21:41:31
沒問題...它主要很重要,因爲XSLT中也有函數,它們與模板不同。 – LarsH 2012-07-18 13:58:38