Avatar billede kirkholt Nybegynder
21. december 2004 - 14:38 Der er 4 kommentarer og
1 løsning

Konverter xml-fil med til csv-fil

Hej

Jeg har brug for at konvertere nedenstående xml-fil til en komma-seperaret fil.

Kolonner i output filen skal være: nummer, navn, inaktiv-fra, inaktiv-til

Forretninger uden inaktiv-elementer skal skrives 1 gang i output-filen med blanke felter for inaktiv/@fra og inaktiv/@til .

Forretninger med et inaktiv-element skal skrives 1 gang i output-filen med det korrekte  inaktiv/@fra og inaktiv/@til.

Forretninger med flere inaktiv-elementer skal gentages i output-filen med samme nummer og navn og det korrekte  inaktiv/@fra og inaktiv/@til.

Forslak til xsl-fil modtages med kyshånd.


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE forretninger <forretninger Generated="2004-04-01 10:27" Month="03" Year="2004">
    <forretning>
        <nummer>11231233</nummer>
        <navn>Den lille købmand</navn>
        <inaktiv Fra="13" Til="22"/>
        <inaktiv Fra="26" Til="29"/>
    </forretning>
    <forretning>
        <nummer>11233344</nummer>
        <navn>Den grimme ælling</navn>
        <inaktiv Fra="3" Til="9"/>
        <inaktiv Fra="17" Til="21"/>
    </forretning>
    <forretning>
        <nummer>45678901231</nummer>
        <navn>Only4 test encoding Æøl?"#¤</navn>
        <inaktiv Fra="6" Til="14"/>
    </forretning>
    <forretning>
        <nummer>31231A3123</nummer>
        <navn>Wave Runner XLT800</navn>
    </forretning>
    <forretning>
        <navn>Arnes Butik</navn>
        <nummer>62375</nummer>
        <inaktiv Fra="4" Til="24"/>
    </forretning>
    <forretning>
        <navn>Arnes Butik</navn>
        <nummer>62375</nummer>
        <inaktiv Fra="4" Til="24"/>
    </forretning>
    <forretning>
        <navn>Arnes Butik</navn>
        <nummer>62375</nummer>
        <inaktiv Fra="4" Til="24"/>
    </forretning>
</forretninger>
Avatar billede atoft Nybegynder
21. december 2004 - 15:20 #1
Hej

Har lige banket dette sammen men ikke testet det, noget skal du lave :-)

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        <xsl:apply:templates select="//forretning"/>
    </xsl:template>
    <xsl:template match="forretning">
        <xsl:if test="inactive">
            <xsl:for-each select="./inactive">
                <xsl:call-template name="writeline">
                    <xsl:with-param name="forretning" select="ancestor::forretning"/>
                    <xsl:with-param name="from" select="@Fra"/>
                    <xsl:with-param name="to" select="@Til"/>
                </xsl:call-template>
            </xsl:for-each>
        </xsl:if>
        <xsl:if test="not (inactive)">
            <xsl:call-template name="writeline">
                <xsl:with-param name="forretning" select="."/>
                <xsl:with-param name="from" select="inactive/@Fra"/>
                <xsl:with-param name="to" select="inactive/@Til"/>
            </xsl:call-template>
        </xsl:if>
    </xsl:template>
    <xsl:template name="writeline">
        <xsl:param name="forretning"/>
        <xsl:param name="from" select=" "/>
        <xsl:param name="to" select=" "/>
        <xsl:value-of select="$forretning/nummer"/>,<xsl:value-of select="$forretning/navn"/>,<xsl:value-of select="$from"/>,<xsl:value-of select="$to"/>,
    </xsl:template>
</xsl:stylesheet>
Avatar billede kirkholt Nybegynder
21. december 2004 - 16:01 #2
Hej atoft

Jeg startede med at kigge på xsl i morges, så jeg er rimelig grøn.

Når jeg prøver at anvende dit sammen med dette vbs-script:

'Load the XML
set xml = CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.load("forretninger.xml")

'Load the XSL
set xsl = CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("forretninger.xsl")

indhold  = xml.transformNode(xsl)

msgbox(indhold)

Set filesys = CreateObject("Scripting.FileSystemObject")
Set filetxt = filesys.CreateTextFile("forretninger.txt", True)
filetxt.write indhold
filetxt.close

får jeg flg: fejl:

Typografiarket indeholder ikke et dokumentelement. typografiarket kan være tomt, eller også er det ikke et komplet XML-dokument.


Jeg kan ikke gennemskue årsagen hertil. Hjælp :)
Avatar billede atoft Nybegynder
22. december 2004 - 09:12 #3
ja jeg havde en mega bøf prøv lige dette her

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>
    <xsl:template match="/">
        <xsl:apply-templates select="//forretning"/>
    </xsl:template>
    <xsl:template match="forretning">
        <xsl:if test="inaktiv">
            <xsl:for-each select="./inaktiv">
                <xsl:call-template name="writeline">
                    <xsl:with-param name="forretning" select="ancestor::forretning"/>
                    <xsl:with-param name="from" select="@Fra"/>
                    <xsl:with-param name="to" select="@Til"/>
                </xsl:call-template>
            </xsl:for-each>
        </xsl:if>
        <xsl:if test="not (inaktiv)">
            <xsl:call-template name="writeline">
                <xsl:with-param name="forretning" select="."/>
            </xsl:call-template>
        </xsl:if>
    </xsl:template>
    <xsl:template name="writeline">
        <xsl:param name="forretning"/>
        <xsl:param name="from" select="''"/>
        <xsl:param name="to" select="''"/>
<xsl:value-of select="$forretning/nummer"/>,<xsl:value-of select="$forretning/navn"/>,<xsl:value-of select="$from"/>,<xsl:value-of select="$to"/><xsl:text>
</xsl:text>

    </xsl:template>
</xsl:stylesheet>
Avatar billede kirkholt Nybegynder
22. december 2004 - 09:58 #4
Hej Atoft

Så virker det. Mange tak for det :)
Avatar billede kirkholt Nybegynder
22. december 2004 - 09:59 #5
Prøver lige igen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester