Semikolongetrennte Werte aus xml Datei auslesen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Semikolongetrennte Werte aus xml Datei auslesen

    Hallo zusammen,

    ich möchte eine xml-Datei in sql umwandeln. Das ganze klappt mit xslt soweit ganz gut. Ich weiß allerdings nicht, wie ich mehrere Werte innerhalb eines Tags sinnvoll getrennt bekomme.

    Das ganze sieht so aus:

    Mal sind es mehrere:

    Quellcode

    1. <Verfasser>Ebert, Max; Fensch, Adam; Fienle, Moritz</Verfasser>


    Mal nur einer:

    Quellcode

    1. <Verfasser>Ebert, Max</Verfasser>


    Oder zwei:

    Quellcode

    1. <Verfasser>Baron, Frank; Heber, Detlef</Verfasser>


    Ich muss Vor- und Nachname einzeln aus dem Tag auslesen können, das bekomme ich mit xslt nicht mehr hin.

    Könnt Ihr mir helfen?

    Würde mich freuen! :)

    Gruß Flo
  • Sorry hab ich ganz vergessen! Is ne geniale Lösung, leider nicht von mir ;)

    hier die xml-datei:

    Quellcode

    1. <?xml version="1.0"?>
    2. <?xml-stylesheet type="text/xsl" href="author.xslt"?>
    3. <author>Evans, Jim; Henderson, Mike; Coyier, Alan</author>


    und hier die xsl-datei:

    Quellcode

    1. <?xml version="1.0" encoding="ISO-8859-1"?>
    2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    3. <xsl:output method="text"/>
    4. <!-- match the eelement to extract data from -->
    5. <xsl:template match="/author">
    6. <xsl:call-template name="authors">
    7. <xsl:with-param name="authors" select="text()"/>
    8. </xsl:call-template>
    9. </xsl:template>
    10. <!-- recursively extract individual authors -->
    11. <xsl:template name="authors">
    12. <xsl:param name="authors"/>
    13. <xsl:variable name="author" select="substring-before($authors,';')"/>
    14. <xsl:choose>
    15. <xsl:when test="string-length($author)=0">
    16. <xsl:call-template name="author">
    17. <xsl:with-param name="author" select="$authors"/>
    18. </xsl:call-template>
    19. </xsl:when>
    20. <xsl:otherwise>
    21. <xsl:call-template name="author">
    22. <xsl:with-param name="author" select="$author"/>
    23. </xsl:call-template>
    24. <xsl:call-template name="authors">
    25. <xsl:with-param name="authors" select="substring-after($authors,';')"/>
    26. </xsl:call-template>
    27. </xsl:otherwise>
    28. </xsl:choose>
    29. </xsl:template>
    30. <!-- extract firstname, lastname, escape single quote, and generate SQL -->
    31. <xsl:template name="author">
    32. <xsl:param name="author"/>
    33. <xsl:variable name="last-name" select="normalize-space(substring-before($author, ','))"/>
    34. <xsl:variable name="first-name" select="normalize-space(substring-after($author, ','))"/>
    35. INSERT INTO author (first_name, last_name) VALUES (
    36. '<xsl:call-template name="replace">
    37. <xsl:with-param name="text" select="$first-name"/>
    38. <xsl:with-param name="search">&apos;</xsl:with-param>
    39. <xsl:with-param name="replace">&apos;&apos;</xsl:with-param>
    40. </xsl:call-template>'
    41. ,
    42. '<xsl:call-template name="replace">
    43. <xsl:with-param name="text" select="$last-name"/>
    44. <xsl:with-param name="search">&apos;</xsl:with-param>
    45. <xsl:with-param name="replace">&apos;&apos;</xsl:with-param>
    46. </xsl:call-template>'
    47. );
    48. </xsl:template>
    49. <!-- recursive search and replace -->
    50. <xsl:template name="replace">
    51. <xsl:param name="text"/>
    52. <xsl:param name="search"/>
    53. <xsl:param name="replace"/>
    54. <xsl:value-of select="$text"/>
    55. <xsl:variable name="tail">
    56. <xsl:if test="contains($text, $search)">
    57. <xsl:call-template name="replace">
    58. <xsl:with-param name="text" select="substring-after($text, $search)"/>
    59. <xsl:with-param name="search" select="$search"/>
    60. <xsl:with-param name="replace" select="$replace"/>
    61. </xsl:call-template>
    62. </xsl:if>
    63. </xsl:variable>
    64. <xsl:value-of select="concat(substring-before($text, $search), $tail)"/>
    65. </xsl:template>
    66. </xsl:stylesheet>
    Alles anzeigen


    output:

    Quellcode

    1. INSERT INTO author (first_name, last_name) VALUES ( 'Jim' , 'Evans' );
    2. INSERT INTO author (first_name, last_name) VALUES ( 'Mike' , 'Henderson' );
    3. INSERT INTO author (first_name, last_name) VALUES ( 'Alan' , 'Coyier' );