Home
Über mich
Blog
Veröffentlichungen
IT-Trainings
Impressum


xsl:analyze-string

Zusammenfassung:

xsl:analyze-string ist eine hervorragende Möglichkeit zur Stringanalyse mittels regulärer Ausdrücke.

xsl:analyze-string

Die unten dargestellte Logik untersucht, ob eine Reihe von Telefonnummern einem vorgegeben Pattern "^[0-9]+(\.|/| )[0-9]+$" entspricht. Dieses Pattern erzwingt als erstes und auch als letztes Zeichen eine Zahl; dazwischen kann entweder ein ".", ein "/" oder ein " " kommen. Dieses Trennzeichen wird über "regex-group(1)" angesteuert und mit Hilfe von "substring-before" bzw. "substring-after" in die Vorwahl sowie in die Anschlußnummer gesplittet.

  <xsl:variable name="vtelnr">
    <telnr>0151.750360</telnr>
    <telnr>0151/750360</telnr>
    <telnr>05532 50168</telnr>
    <telnr>++49(0)5532/50168</telnr>
    <telnr>05532.50168</telnr>
    <telnr>05532/50168</telnr>
  </xsl:variable>
  <xsl:for-each select="$vtelnr/telnr">
    <xsl:analyze-string 
         regex="^[0-9]+(\.|/| )[0-9]+$" 
         select=".">      
      <xsl:matching-substring>
        <korrekt 
          vorwahl="{substring-before(. , regex-group(1))}">
          <xsl:value-of 
               select="substring-after(. , regex-group(1))" />
        </korrekt>
      </xsl:matching-substring>
      <xsl:non-matching-substring>
        <fehlerhaft>
          <xsl:value-of select="." />
        </fehlerhaft>
      </xsl:non-matching-substring>
    </xsl:analyze-string>
  </xsl:for-each>

Das Ergebnis der Auswertung sehen wir hier. <telnr>++49(0)5532/50168</telnr> entspricht nicht dem gesuchten Pattern, daher wird es als fehlerhaft ausgegeben.

   <korrekt vorwahl="0151">750360</korrekt>
   <korrekt vorwahl="0151">750360</korrekt>
   <korrekt vorwahl="05532">50168</korrekt>
   <fehlerhaft>++49(0)5532/50168</fehlerhaft>
   <korrekt vorwahl="05532">50168</korrekt>
   <korrekt vorwahl="05532">50168</korrekt>

XPath: analyze-string

Alternativ kann in XSLT 3.0 auch die XPath-Funktion "analyze-string" verwendet werden. Sie generiert ein "analyze-string-result"-Element mit den Childnodes "match" bzw. "non-match".

 <xsl:template match="/" name="xsl:initial-template">
  <root>
   <xsl:variable name="vtelnr">
    <telnr>0151.750360</telnr>
    <telnr>0151/750360</telnr>
    <telnr>05532 50168</telnr>
    <telnr>++49(0)5532/50168</telnr>
    <telnr>05532.50168</telnr>
    <telnr>05532/50168</telnr>
   </xsl:variable>
   <xsl:for-each select="$vtelnr/telnr">
    <teln>
     <xsl:copy-of 
      select="fn:analyze-string(string(./text()), '^[0-9]+(\.|/| )[0-9]+$')"/>
    </teln>
   </xsl:for-each>
  </root>
 </xsl:template>

Das Ergebnis:

<root>
  <teln>
    <analyze-string-result 
      xmlns="http://www.w3.org/2005/xpath-functions">
      <match>0151<group nr="1">.</group>750360</match>
    </analyze-string-result>
  </teln>
  <teln>
    <analyze-string-result 
      xmlns="http://www.w3.org/2005/xpath-functions">
      <match>0151<group nr="1">/</group>750360</match>
    </analyze-string-result>
  </teln>
  <teln>
    <analyze-string-result 
      xmlns="http://www.w3.org/2005/xpath-functions">
      <match>05532<group nr="1"> </group>50168</match>
    </analyze-string-result>
  </teln>
  <teln>
    <analyze-string-result 
      xmlns="http://www.w3.org/2005/xpath-functions">
      <non-match>++49(0)5532/50168</non-match>
    </analyze-string-result>
  </teln>
  <teln>
    <analyze-string-result 
      xmlns="http://www.w3.org/2005/xpath-functions">
      <match>05532<group nr="1">.</group>50168</match>
    </analyze-string-result>
  </teln>
  <teln>
    <analyze-string-result 
      xmlns="http://www.w3.org/2005/xpath-functions">
      <match>05532<group nr="1">/</group>50168</match>
    </analyze-string-result>
  </teln>
</root>

qrpic/analyze_string.jpg

wg / 30. September 2017




Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf (info10@wilfried-grupe.de).



Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

Mobil: 0151. 750 360 61 * eMail: info10@wilfried-grupe.de