xslt - How to find all numbers in a string -


ich versuche mit einer funktion sämtliche zahlen aus einem element oder string zu ermitteln. dabei soll die anzahl der zahlen und ihre stelligkeit egal sein. folgende funktion habe ich bislang geschrieben:

<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> 

beispiel xml:

<address>street 12, 12345 town<address> 

bei dem funktionsaufruf soll dann die entsprechende zahl ausgewählt werden können:

...select="itp:find_num(address)[2]"/> 

zum beispiel die 2 für die postleitzahl. das problem ist nun, dass in der sequence auch leere werte stehen, dass ich in der praxis die postleitzahl nur mit [4] erreiche.

gibt es eine elegantere möglichkeit meine problem zu lösen? und wenn nicht, wie lösche ich die leeren elemente aus der sequence??

now in englisch :-)

i'm trying find numbers in element oder string. shouldn't matter how many numbers available or @ position in string.

here function:

<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> 

example xml

<address>street 12, 12345 town<address> 

when call function want choose, number want pick:

...select="itp:find_num(address)[2]"/> 

par example [2] postal code. problem have is, there empty elements in sequence, have choose [4] postal code.

is there easier way solve problem? or there way remove empty elements in sequence??

thanks :-)

i write function as

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"   xmlns:xs="http://www.w3.org/2001/xmlschema"   xmlns:mf="http://example.org/mf"   exclude-result-prefixes="xs mf">  <xsl:function name="mf:find_num" as="xs:integer*">   <xsl:param name="input" as="xs:string"/>   <xsl:analyze-string select="$input" regex="[0-9]+">     <xsl:matching-substring>       <xsl:sequence select="xs:integer(.)"/>     </xsl:matching-substring>   </xsl:analyze-string> </xsl:function>  <xsl:template match="address">   <xsl:value-of select="mf:find_num(.)" separator=", "/> </xsl:template>  </xsl:stylesheet> 

of course converting xs:integer optional, if want function return sequence of strings containing digits change do

<xsl:function name="mf:find_num" as="xs:string*">   <xsl:param name="input" as="xs:string"/>   <xsl:analyze-string select="$input" regex="[0-9]+">     <xsl:matching-substring>       <xsl:sequence select="."/>     </xsl:matching-substring>   </xsl:analyze-string> </xsl:function> 

Comments

Popular posts from this blog

java - Jmockit String final length method mocking Issue -

asp.net - Razor Page Hosted on IIS 6 Fails Every Morning -

c++ - wxwidget compiling on windows command prompt -