CSV validieren / CSV validieren mit XSLT 3.0

CSV validieren mit XSLT 3.0

CSV validieren mit XSLT 3.0

Die Datenvalidierung von CSV-Dateien ist auch in XSLT 2.0 und XSL 3.0 möglich.

CSV validieren mit XSLT 3.0

Das unten dargestellte XSL - Beispiel spricht jede Zeile (natürlich wieder ohne Headerzeile) einer CSV-Datei an und prüft dieses mit xsl:analyze-string und dem dort definierten regex-Attribut. Entspricht die Zeile dem Pattern, so wird sie in einem <korrekt>-Element dargestellt, andernfalls mit einem <fehlerhaft>-Element.

Freilich akzeptiert der von mir verwendete XSL-Prozessor nicht die geschweiften Klammern "{}", die als Quantifizierer für wiederholte Aufrufe fungieren:


<xsl:variable name="csvdatei" select="'C:/wg/csv.txt'"/>
<xsl:template name="csvvalidate">
 <xsl:element name="ERG">
  <xsl:for-each 
     select="unparsed-text-lines($csvdatei)[position() &gt; 1]">
   <xsl:variable name="pos" select="position()" />   
   <xsl:analyze-string 
     regex="^[0-9]+;[A-Z][a-z]+;[A-Z][a-z]+;[0-9]+(\.[0-9][0-9])?$" 
     select=".">
    <xsl:matching-substring>
     <korrekt zeile="{$pos}">
      <xsl:value-of select="." />
     </korrekt>
    </xsl:matching-substring>
    <xsl:non-matching-substring>
     <fehlerhaft zeile="{$pos}">
      <xsl:value-of select="." />
     </fehlerhaft>
    </xsl:non-matching-substring>
   </xsl:analyze-string>
  </xsl:for-each>
 </xsl:element>
</xsl:template>

Um bewußt fehlerhafte Ergebnisse zu produzieren, habe ich mit einem modifizierten Pattern gearbeitet, das die optionalen Nachkommastellen der letzten Zahl unterbindet (".56" wäre also falsch).


^[0-9]+;[A-Z][a-z]+;[A-Z][a-z]+;[0-9]+$

"Bewaffnet" mit diesem Pattern, erhalte ich das erwartete Ergebnis:


<ERG>
  <fehlerhaft zeile="1">1;Holzflos;Hugo;234.56</fehlerhaft>
  <fehlerhaft zeile="2">4;Nixlos;Nicole;1234.56</fehlerhaft>
  <korrekt zeile="3">9;Sprachlos;Stefan;5430</korrekt>
  <fehlerhaft zeile="4">2;Sagblos;Stefan;321.45</fehlerhaft>
  <fehlerhaft zeile="5">3;Sorglos;Siggi;987.58</fehlerhaft>
  <fehlerhaft zeile="6">7;Herzlos;Heini;654.21</fehlerhaft>
  <fehlerhaft zeile="7">8;Rhodos;Rudi;333.33</fehlerhaft>
  <korrekt zeile="8">15;Kolos;Karl;456</korrekt>
  <fehlerhaft zeile="9">16;Sinnlos;Simone;876.54</fehlerhaft>
  <fehlerhaft zeile="10">17;Hirnlos;Horst;546.77</fehlerhaft>
  <fehlerhaft zeile="11">18;Wertlos;Werner;777.77</fehlerhaft>
  <korrekt zeile="12">19;Lustlos;Ludwig;357</korrekt>
  <korrekt zeile="13">5;Wasistlos;Willi;6789</korrekt>
  <korrekt zeile="14">10;Ruhelos;Rita;234</korrekt>
  <korrekt zeile="15">11;Schlaflos;Susi;321</korrekt>
  <korrekt zeile="16">12;Rielos;Lotte;456</korrekt>
  <korrekt zeile="17">6;Bodenlos;Betty;3450</korrekt>
  <korrekt zeile="18">13;Muehelos;Martin;222</korrekt>
  <korrekt zeile="19">14;Leinenlos;Liane;135</korrekt>
</ERG>

wg / 10. November 2017



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







Vielen Dank für Ihr Interesse an meiner Arbeit.


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

☎ 0151. 750 360 61 * eMail: info2018@wilfried-grupe.de

www.wilfried-grupe.de/CSV_validate_XSLT.html