Avatar billede boomshanka Nybegynder
16. juni 2003 - 15:51 Der er 16 kommentarer og
1 løsning

transformation fra xml til xml

Det er ikke noget problem at transformere xml om til html, men hvad gør man hvis man skal transformere en xml-fil om til et andet xml-format?

Et lille eksempel, som evt. kan ses i en browser vil være fint.
Avatar billede atoft Nybegynder
16. juni 2003 - 15:58 #1
Du skal blot ændre din method til xml på xsl:output elementet.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
</xsl:stylesheet>


og ellers kode dit xslt som du plejer.
Avatar billede boomshanka Nybegynder
16. juni 2003 - 16:11 #2
Jeg har prøvet, men det virker tilsyneladende ikke. Skal <?xml-stylesheet type i xml-filen sættes til xml?
Avatar billede boomshanka Nybegynder
16. juni 2003 - 16:19 #3
Hvis man har følgende xml:

<?xml version="1.0"?>
<?xml-stylesheet type='xml/xsl' href='transformation_simple.xsl'?>
<blomster>
    <blomst id='EA54'>
        <blomsternavn>rose</blomsternavn>
        <land>Ungarn</land>
        <pris>57</pris>
    </blomst>
    <blomst id='JE04'>
        <blomsternavn>orkide</blomsternavn>
        <land>Italien</land>
        <pris>157</pris>
    </blomst>
</blomster>

...og følgende xslt:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<produkter>
<xsl:for-each select="blomster/blomst">
<produkt>
    <navn><xsl:value-of select="blomsternavn"/></navn>
    <fabrikant><xsl:value-of select="land"/></fabrikant>
    <pris><xsl:value-of select="pris"/></pris>
</produkt>
</xsl:for-each>
</produkter>
</xsl:template>
</xsl:stylesheet>

hvor ligger problemet så henne? Hvis jeg prøver at åbne xml-filen i IE så viser den bare den oprindelige xml-fil
Avatar billede awolffdk Nybegynder
16. juni 2003 - 17:05 #4
Er det nu også den oprindelige XML-fil..... Hvor blev dit blomst id='EA54' af?
Så vidt jeg kan se kommer det ikke med i transformationen
Avatar billede boomshanka Nybegynder
16. juni 2003 - 17:38 #5
okay, det var min fejl :)

Den attribut må du godt se bort fra. Du kan bare betragte XML-filen som elementer uden attributter
Avatar billede awolffdk Nybegynder
16. juni 2003 - 17:47 #6
ØHHHHHHH, jeg tog vist også fejl.
Din xml-fil får slet ikke fat i din xsl
Ret anden linie til <?xml-stylesheet type="text/xsl" href='transformation_simple.xsl'?> og så skal du bare se fejl ;-))
Avatar billede awolffdk Nybegynder
16. juni 2003 - 17:52 #7
Der mangler vist også lige en linie i xsl-filen efter <produkter>
<xsl:apply-templates select= "blomster/blomst"></xsl:apply-templates>

Men så er resultatet bare en flad tekst når det vises i browseren.
HHMMM
Avatar billede boomshanka Nybegynder
16. juni 2003 - 20:51 #8
Okay, referencen i XML-filen er rettet og jeg har revideret xslt-dokumentet så det er struktureret lidt bedre:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
    <produkter>
        <xsl:apply-templates/>
    </produkter>
</xsl:template>

<xsl:template match="blomster/blomst">
    <produkt>
    <navn><xsl:apply-templates select="blomsternavn"/></navn>
    <fabrikant><xsl:apply-templates select="land"/></fabrikant>
    <pris><xsl:apply-templates select="pris"/></pris>
    </produkt>
</xsl:template>

</xsl:stylesheet>

...men ligemeget hjælper det. Hvis jeg sætter "<?xml-stylesheet type..." til xml så bliver det også vist i browseren som xml. Men elementerne hedder stadig <blomster> og <blomst> istedet for <produkter> og <produkt> :/
Avatar billede awolffdk Nybegynder
16. juni 2003 - 21:41 #9
prøv det her. Det giver dig et output i en flad tekstfil. Jeg har prøvet mig lidt frem, men jeg kan ikke transformere det til en anden xml-fil desværre :-(
Jeg har prøvet at skrive <text>&lt;produkter&gt;</text> på den måde kan man få <produkter> skrevet i teksten, men inde i templates går denne metode ikke desværre

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<produkter>
<xsl:apply-templates select= "blomster/blomst"></xsl:apply-templates>
<xsl:for-each select="blomster/blomst">
<produkt>
    <navn><xsl:value-of select="blomsternavn"/></navn>
    <fabrikant><xsl:value-of select="land"/></fabrikant>
    <pris><xsl:value-of select="pris"/></pris>
</produkt>
</xsl:for-each>
</produkter>
</xsl:template>
</xsl:stylesheet>
Avatar billede boomshanka Nybegynder
16. juni 2003 - 22:34 #10
Når jeg prøver dit eksempel, så får jeg godt nok vist den flade tekstfil, men det er som om den ignorerer <produkter> og <produkt>. De hedder stadigvæk <blomster> og <blomst> :[

Så må jeg jo bare hælde lidt mere benzin på bålet...
Avatar billede boomshanka Nybegynder
17. juni 2003 - 22:43 #11
Er der virkelig ingen, som kan fortælle mig hvordan man transformerer et simpelt XML-dokument om til et andet XML-format? Er det virkelig så svært?
Avatar billede atoft Nybegynder
18. juni 2003 - 08:15 #12
prøv lige dette xslt

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
    <produkter>
        <xsl:apply-templates select="//blomster/blomst" />
    </produkter>
</xsl:template>

<xsl:template match="blomst">
    <produkt>
    <navn><xsl:apply-templates select="blomsternavn"/></navn>
    <fabrikant><xsl:apply-templates select="land"/></fabrikant>
    <pris><xsl:apply-templates select="pris"/></pris>
    </produkt>
</xsl:template>

</xsl:stylesheet>
Avatar billede boomshanka Nybegynder
18. juni 2003 - 15:00 #13
Nix, det giver det samme resultat :(

Elementerne er stadig <blomster> og <blomst> istedet for <produkter> og <produkt>
Avatar billede atoft Nybegynder
18. juni 2003 - 15:06 #14
Prøv at lave din transformering med saxon. Der er måske problemer i forbindelse med ie.

Eller lave et lille javascript som laver transformeringen.
Avatar billede awolffdk Nybegynder
18. juni 2003 - 16:49 #15
Tjah, så vidt jeg kan se på kildeteksten i IE, så vises der den oprindelige XML struktur, men det er vel også kun rimeligt, da det jo er kilden. For at transformere kilden skal der transformeres, og vises et nyt dokument. Dette kan nok ikke gøres uden et program så som en asp side eller lign. for at lave et nyt dokument og vise det. Med XSL vises der jo den samme kilde, men bare med en anden visning.

Håber det giver lidt mening.
Mere bensin på bålet :-)
Avatar billede awolffdk Nybegynder
18. juni 2003 - 16:54 #16
Årsagen til struktur visningen i IE fra det oprindelige dokument er at der ligger en standard XSL til visning af XML indbygget i IE, således at man kan se struktur og åbne/lukke de enkelte elementer....... Kilden er stadig den samme

Mere bensin :-))))))))
Avatar billede boomshanka Nybegynder
01. februar 2004 - 18:18 #17
Så får vi vist lige afsluttet det her spørgsmål. Det hjalp at bruge javascript til at løse transformeringen atoft, så du bliver lidt rigere...
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