[XML] Structuur XML data veranderen

Pagina: 1
Acties:
  • 165 views sinds 30-01-2008
  • Reageer

  • KenVerburg
  • Registratie: Juli 2001
  • Laatst online: 18:28
Voor een stage opdracht (maak een webwinkel en zorg ervoor dat orders in KING ingelezen kunnen worden en dat artikelgegevens uit boekhoudprogramma KING op een webpagina weergegeven kunnen worden) moeten wij gegevens uit een geëxporteerd KING XML-bestand gebruiken dat er als volgt uit ziet:

<ROWDATA>
<ROW Artikelnummer="CDROM70080" Zoekcode="Cd-r 700 m" Omschrijving="CD-R 700 Mb (80 min), zilv-blauw 1x-8x" VerkoopPrijsExBTW="1.08" VerkoopPrijsInBTW="1.2852" VoorraadArtikel="1" />
</ROWDATA>

Er wordt dus gebruik gemaakt van attibuten bij <ROW>. Wij willen deze data echter volgens een andere manier gestructureerd hebben voordat we er echt iets mee kunnen doen en dit kan niet via KING zelf. De structuur zou er op de volgende manier uit moeten zien (een manier die ook meer aan de XML eisen voldoet):

<ROWDATA>
<ROW>
<ARTIKELNUMMER>CDROM70080</ARTIKELNUMMER>
<ZOEKCODE>Cd-r 700 m</ZOEKCODE>
<OMSCHRIJVING>CD-R 700 Mb (80 min), zilv-blauw 1x-8x</OMSCHRIJVING>
<VERKOOPPRIJSEXBTW>1.08</VERKOOPPRIJSEXBTW>
<VERKOOPPRIJSINBTW>1.2852</VERKOOPPRIJSINBTW>
<VOORRAADARTIKEL>1</VOORRAADARTIKEL>
</ROW>
</ROWDATA>

Dus zodat de attributen, zoals in het eerste voorbeeld, veranderd worden naar elementen met een open- en sluittag.

We hebben al verschillende manieren uitgeprobeerd; zoals het aanmaken van een DTD schema, maar dit helpt alleen als je snel een structuur wilt neerzetten van een bestand (bijvoorbeeld in XML Spy) waar dan alleen data ingevuld hoeft te worden.

Weet iemand misschien of er converteer programma's zijn voor dit specifieke XML probleem of kan het toch opgelost worden met DTD en/of XSL? We gebruiken XML Spy als editor, misschien kunnen we daar iets mee?

Alvast bedankt!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Met XSLT kun je inderdaad prima XML van de ene vorm in de andere vorm omzetten.

Loop voor wat meer inzicht even de XPath tutorial op http://www.w3schools.com door.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
dit moet werken, dacht ik zo:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<xsl:output method="xml"/>

<xsl:template match="rowdata">
    <xsl:apply-templates select="row">
</xsl:template>

<xsl:template match="row">
    <row>
        <xsl:for-each select="@*">
            <xsl:element name="{name(.)}">
                <xsl:value-of select="text()"/>
            </xsl:element>
        </xsl:for-each>
    </row>
</xsl:template>

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


  • KenVerburg
  • Registratie: Juli 2001
  • Laatst online: 18:28
Allebei hartstikke bedankt.

Het XSLT script werkte nadat voor de > een / was toegevoegd bij
code:
1
<xsl:apply-templates select="row">

Als deze XSLT uitgevoerd wordt dan komt het volgende er uit:

code:
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8">
<row>
<Artikelnummer></Artikelnummer>
<Zoekcode></Zoekcode>
<Omschrijving></Omschrijving>
<Opbrengstgroep></Opbrengstgroep>
<Eenheid></Eenheid>
</row>

Hij haalt dus wel de namen uit de <ROW>, maar niet de informatie bij de verschillende elementen. Wat dus nog mist is <Artikelnummer>00000000</Artikelnummer>

Misschien dat <xsl:value-of select="text()"/> niet goed werkt op de aangegeven manier?

  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
hmm.. <xsl:value-of select="."/> misschien?
[edit]waarschijnlijk werkt text() alleen op text nodes[edit]

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


  • KenVerburg
  • Registratie: Juli 2001
  • Laatst online: 18:28
Dat deed het hem! Hartstikke bedankt _/-\o_
Pagina: 1