我嘗試從一個元素或字符串的函數確定所有的數字。數字和他們的統計數字應該沒有關係。我以前寫 以下功能:如何找到所有的數字字符串中的
<xsl:function name="itp:find_num">
<xsl:param name="tmp"/>
<xsl:if test="matches($tmp,'\d+')">
<xsl:analyze-string select="$tmp" regex="{'\d+'}">
<xsl:matching-substring>
<xsl:sequence select="."/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="''"/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:if>
</xsl:function>
示例XML:
<address>street 12, 12345 town<address>
在函數調用應該是適當的數目可被選擇:
...select="itp:find_num(address)[2]"/>
例如,2爲郵編。 的問題是,空值是這樣的序列中,我在實踐中實現郵政編碼只[4]。
有沒有解決我的問題更優雅的方式? 如果不是,我如何從序列中刪除空元素?
英語現在:-)
我試圖找到一個字符串或元素的所有數字。它不應該不管有多少編號或在哪個位置他們是在字符串中。
這裏是我的功能:
<xsl:function name="itp:find_num">
<xsl:param name="tmp"/>
<xsl:if test="matches($tmp,'\d+')">
<xsl:analyze-string select="$tmp" regex="{'\d+'}">
<xsl:matching-substring>
<xsl:if test=". != ''">
<xsl:sequence select="."/>
</xsl:if>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="''"/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:if>
</xsl:function>
示例XML
<address>street 12, 12345 town<address>
當我調用我想選擇的功能,我想選擇哪個號碼:
...select="itp:find_num(address)[2]"/>
帕示例[2]的郵政編碼。 這個問題我有是,thatthere是序列中的空元素,所以我纔不得不選擇[4],以獲得郵政編碼。
有沒有解決我的問題一個更簡單的方法? 或者有什麼辦法可以按照這個順序刪除所有空元素?
感謝:-)
Christian Manthey,您可能對更簡單,更短,純粹的XPath解決方案感興趣。 – 2013-05-08 14:40:13