Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[XSL + XML] Elementen worden niet weergegeven.

Pagina: 1
Acties:

  • Erkel
  • Registratie: Mei 2006
  • Laatst online: 07-11 10:51
Geachte mede tweakers,

Ik ben momenteel bezig met een website, waarop verschillende producten te vinden zijn. Nu kunnen medewerkers nieuwe producten toe voegen door een product id op te geven op een pagina. Deze pagina benaderd dat een 'datafeed' die XML output geeft met product data. in de volgende vorm (versimpeld):

XML:
1
2
3
<products>
<product prodid='blaat' name='blaat naam' desc='beschrijving' />
</products>


Dit werkt allemaal prima, maar zoals je ziet worden de gegevens van het product als attributen opgegeven. Er is al een stylesheet (XSL) gemaakt door een collega programmeur, maar deze is nu op vakantie en niet bereikbaar. En wat blijkt, het werkt niet. Hier de stylesheet:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version='1.0' encoding='utf-8' ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml"/>
    <xsl:template match="/">
        <products>
            <xsl:for-each select="/products/product">
                <xsl:element name="{name()}">
                    <xsl:for-each select="@*">
                        <xsl:element name="{name()}">
                            <xsl:value-of select="."/>
                        </xsl:element>
                    </xsl:for-each>
                </xsl:element>
            </xsl:for-each>
        </customers>
    </xsl:template>
</xsl:stylesheet>


Het probleem is het volgende, alle data wordt wel uit de attributen gehaald, maar de elementen worden niet aangemaakt. Ik krijg dus een grote lap text met alle data achter elkaar. Ook als ik ipv
<xsl:element name="{name()}"> zelf een naam invul wordt er geen element weergegeven.

Ik heb weinig ervaring met XSL(T) en XPath, heb all wel rond gegoogled en kwam een stylesheet tegen die verdacht veel op deze leek maar die werkte dus ook niet. Heb ook een verscheiden fora's door gelezen maar kon niet echt een oplossing vinden. Ook na het volgen van de tutorials op w3schools.com kwam ik er niet uit.
Iemand een suggestie?

C2D E6600 - 2048MB Kingston - Sapphire HD2900XT - 200Gb Samsung - Asus P5B-E


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Tsja, als ik dit uitprobeer, komt dit eruit (Firefox testpagina):
XML:
1
2
3
<products><product>
<prodid>blaat</prodid><name>blaat naam</name><desc>beschrijving</desc>
</product></products>

Lijkt gewoon te werken dus... (Wel een klein foutje, customers moet products zijn in de xsl)

Wellicht ligt het aan een foute implementatie?

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Verwijderd

Ik snap niet helemaal wat de stylesheet moet doen.
Er komt XML binnen en er gaat weer XML uit?

Ik weet niet of bovenstaande XSL daadwerkelijk gebruikt wordt, maar op regel 5 begint een <products> tag en wordt op regel 15 afgesloten met een </customers> tag.
Dat loopt over het algemeen niet zo soepel :).

Ik begrijp dat het bovenste code blok input is voor de stylesheet?
Wat is de bedoeling als output?

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 16-11 18:42
Met bovenstaande tip, dat </customer moet worden gewijzigd in </product> moet dit voorbeeld inderdaad werken. Ik weet niet in welke browser je het hebt geprobeerd, maar wat je beschrijft klinkt als dat het wel werkt, maar niet juist wordt weergegeven in je browser.

Internet Explorer heeft (had) de bijzondere eigenschap dat als je xml parst met xsl en dan genereert een foutmelding, dat dit als tekst wordt weergegeven (zegmaar html). Als het dan vervolgens wel werkt, past de browser de mode niet aan naar xml-weergave, het blijft tekstvorm. De oplossing is dan niet oneindig F5-en, maar de browser afsluiten en weer starten.

  • Erkel
  • Registratie: Mei 2006
  • Laatst online: 07-11 10:51
pedorus schreef op donderdag 18 september 2008 @ 09:23:
Tsja, als ik dit uitprobeer, komt dit eruit (Firefox testpagina):
XML:
1
2
3
<products><product>
<prodid>blaat</prodid><name>blaat naam</name><desc>beschrijving</desc>
</product></products>

Lijkt gewoon te werken dus... (Wel een klein foutje, customers moet products zijn in de xsl)

Wellicht ligt het aan een foute implementatie?
Hmmm vreemd. Customers had ik trouwens al aangepast, maar dat maakt geen verschil. Ik krijg 'gewoon blaatblaat naambeschrijving' in IE7 en FF3 en Safari. Kun je jouw code hier posten?

C2D E6600 - 2048MB Kingston - Sapphire HD2900XT - 200Gb Samsung - Asus P5B-E


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Ik denk dat je zoekt naar zoiets dan (FF, Opera, etc.):
JavaScript:
1
2
3
var serializer = new XMLSerializer();
var xml = serializer.serializeToString(resultDocument);
document.getElementById("result").innerHTML=xml.replace(/</g, "&lt;");

Anders zie je de tags idd niet ;) Of doe eens 'view source'.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Erkel
  • Registratie: Mei 2006
  • Laatst online: 07-11 10:51
View source laat het gewone XML document zien. Dat had ik al geprobeerd.

C2D E6600 - 2048MB Kingston - Sapphire HD2900XT - 200Gb Samsung - Asus P5B-E


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 16-11 18:42
Moet je niet <?xml etc. erboven zetten? Je output method staat wel goed dus dat is het ook niet.

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Erkel schreef op donderdag 18 september 2008 @ 13:20:
View source laat het gewone XML document zien. Dat had ik al geprobeerd.
Tikfoutje, ik bedoelde 'view selection source' (evt na select all). :)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Besides, double quotes gebruiken ipv single quotes in XML.
Pagina: 1