我尝试从一个元素或字符串的函数确定所有的数字。数字和他们的统计数字应该没有关系。我以前写 以下功能:如何找到所有的数字字符串中的
<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