我的系統生成一個XML,其中包含一個節點,該節點根據事件的類型具有不同的名稱。 名稱可以是<floatRate>
或<fixedRate>
。路徑始終相同,只有不同的節點名稱。如何根據使用XLST的某個節點的存在使節點結果不同?
我需要一個轉換,可以根據該名稱填充一個字段。該字段將被稱爲<type>
,並且競爭必須基於節點名稱浮動或固定。 可以這樣做嗎?
我的系統生成一個XML,其中包含一個節點,該節點根據事件的類型具有不同的名稱。 名稱可以是<floatRate>
或<fixedRate>
。路徑始終相同,只有不同的節點名稱。如何根據使用XLST的某個節點的存在使節點結果不同?
我需要一個轉換,可以根據該名稱填充一個字段。該字段將被稱爲<type>
,並且競爭必須基於節點名稱浮動或固定。 可以這樣做嗎?
該轉化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="fixedRate|floatRate">
<type><xsl:value-of select=
"substring-before(name(),'Rate')"/></type>
</xsl:template>
</xsl:stylesheet>
當此XML文檔上施加:
<rates>
<fixedRate>2.3</fixedRate>
<floatRate>1.1</floatRate>
</rates>
產生想要的結果:
<rates>
<type>fixed</type>
<type>float</type>
</rates>
我相信我會用這樣的東西。坦克再次Dimitre。 – 2010-07-01 14:19:33
選擇/馬赫表達式可以做布爾「或」,如
match="floatRate|fixedRate"
編輯你的問題,增加輸入的樣本,預期產出和你已經嘗試過以獲得更多的幫助
這不是「布爾值」或「這是XPath聯合運算符」。 – 2010-07-01 01:03:12
我沒有意識到select/mach表達式可以做布爾(或聯合)。更多的是,這是做我所需要的最簡單的方法。 坦克的幫助。有了這個和另一個例子,我相信我找到了一個可行的解決方案。 – 2010-07-01 14:18:00
假設我們有這個文件作爲輸入:
<result>
<floatRate>1.1</floatRate>
</result>
這個樣式表:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="result">
<type>
<xsl:value-of select="substring-before(name(floatRate|fixedRate),'Rate')"/>
</type>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
輸出:
<type>float</type>
我不需要
@Daniel Corsi:該模板覆蓋文本節點的內置模板(僅輸出其值)。在這種情況下,並不是必須的:'result'模板在到達'floatRate'的文本節點之前中斷遞歸。 – 2010-07-01 15:59:49
好問題(+1)。請參閱我的答案,瞭解遵循XSLT精神的完整解決方案。 – 2010-07-01 01:10:29