在XSL中有像CONTAIN這樣的函數,如果我用simbol編號,如「123112'+:」那麼就不會接受它。XSLT:數字格式
更精確:
<Number>111111</Number>
<Number>123123+</Number>
<Number>222222</Number>
<Number>222222+</Number>
答案:
111111
222222
我堅持使用XSLT 1.0版本
在XSL中有像CONTAIN這樣的函數,如果我用simbol編號,如「123112'+:」那麼就不會接受它。XSLT:數字格式
更精確:
<Number>111111</Number>
<Number>123123+</Number>
<Number>222222</Number>
<Number>222222+</Number>
答案:
111111
222222
我堅持使用XSLT 1.0版本
另一種方法工作,利用數字到布爾轉換。
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:apply-templates select="Number[boolean(number()) or . = 0]"/>
</xsl:template>
<xsl:template match="Number">
<xsl:value-of select="."/>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
隨着輸入:
<Numbers>
<Number>111111</Number>
<Number>123123+</Number>
<Number>222222</Number>
<Number>222222+</Number>
</Numbers>
正確的結果:
111111
222222
引述規格:
布爾函數將其 參數轉換爲一個布爾值,如下所示:一個 n紅棕色爲真當且僅當它是 既不是正的或負零,也不 NaN的
請使用以下XPath選擇包含數字的所有節點。它會跳過帶有加號的那些。
Number[number(.)=number(.)]
應與XSLT 1.0
又一解決方案:)
<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="Number[not(.*.+1)]"/>
</xsl:stylesheet>
當這種轉變是在下面的XML文檔應用:
<t>
<Number>111111</Number>
<Number>123123+</Number>
<Number>222222</Number>
<Number>222222+</Number>
</t>
wante d,正確的結果產生:
<t>
<Number>111111</Number>
<Number>222222</Number>
</t>
說明:所有Number
元素至極表達:
<xsl:template match="Number[not(.*.+1)]"/>
:
not(.*.+1)
被true()
由簡單模板規則過濾掉
只有在Number
元素的字符串值canno不能轉換爲數字。在這種情況下,根據定義,.*.+1
評估爲NaN
和boolean(NaN)
爲false()
。
如果Number
元素的字符串值可以被轉換爲數字$ NUM,則上面的表達式是等效於:
not($num*$num+1)
和$num*$num+1 >= 1
用於任何數目$num
,所以,boolean(.*.+1)
在這種情況下是總是true()
。
@Petras:你的問題不清楚。你是否想要選擇那些沒有像這種模式那樣的`Number`元素「###### +」? – 2011-01-31 16:32:49
下襬。不(包含(數字,'+'))。或者模式更具體? – Flack 2011-01-31 16:37:40
如果我們不僅有數字元素而不是不接受它。如果2020年,我們會採取,但如果2020+,我們不會。 – Petras 2011-01-31 16:40:59