[XSL] Vreemde toevoeging van attribuut

Pagina: 1
Acties:

  • tomato
  • Registratie: November 1999
  • Niet online
Ik heb de volgende XSL:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>

<xsl:template match="/idboard/posts">
    <myDataSet xmlns="NetFrameWork">
    <xsl:apply-templates/>
    </myDataSet>
</xsl:template>

<xsl:template match="post">
    <Post>
    <xsl:apply-templates select="topic"/>
    <LastPost><xsl:value-of select="datetime"/></LastPost>
    </Post>
</xsl:template>

[..]

En de volgende XML:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0"?>

<idboard>
    <posts>
        <post id="2">
            <topic id="22">
                <title>En nog een topic</title>
                <forum id="222">
                    <title>Tweede forum</title>
                </forum>
            </topic>
            <datetime>2001-11-21 01:22:00</datetime>
        </post>
        <post id="3">
            <topic id="33">
                <title>Wat een topictitle</title>
                <forum id="222">
                    <title>Tweede forum</title>
                </forum>
            </topic>
            <datetime>2001-11-11 22:31:36</datetime>
        </post>
        <post id="4">
            <topic id="44">
                <title>Hier is een topictitle</title>
                <forum id="222">
                    <title>Tweede forum</title>
                </forum>
            </topic>
            <datetime>2001-11-06 00:50:39</datetime>
        </post>
    </posts>
</idboard>

Het werkt bijna zoals ik zou verwachten:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-16"?>
    <myDataSet xmlns="NetFrameWork">
        <Post xmlns="">
            <Topic>En nog een topic</Topic>
            <Forum>Tweede forum</Forum>
            <LastPost>2001-11-21 01:22:00</LastPost>
        </Post>
        <Post xmlns="">
            <Topic>Wat een topic</Topic>
            <Forum>Tweede forum</Forum>
            <LastPost>2001-11-11 22:31:36</LastPost>
        </Post>
        <Post xmlns="">
            <Topic>Hier is een topictitle</Topic>
            <Forum>Tweede forum</Forum>
            <LastPost>2001-11-06 00:50:39</LastPost>
        </Post>
    </myDataSet>

Alleen een ding vind ik erg vreemd, de <Post> tags krijgen het attribuut 'xmlns' (XML NameSpace, maar dat lijkt me niet relevant) mee (zonder value), zo dus: <Post xmlns="">.

Dat wil ik uiteraard niet. Doe ik nu iets heel stoms ofzo? Ik begrijp niet waarom dit attribuut wordt toegevoegd.

Ik gebruik overigens MSXML 3.0

Verwijderd

Dat komt omdat je voor myDataset expliciet een namespace zet terwijl Post die niet heeft. Dus moet die voor de Post elements weer gecleared worden.

  • tomato
  • Registratie: November 1999
  • Niet online
Ik merk net dat ik het xmlns attribute zowiezo niet nodig had (deze is waarschijnlijk default), dus na weglaten ervan is het probleem ook opgelost.
HH: Dat komt omdat je voor myDataset expliciet een namespace zet terwijl Post die niet heeft. Dus moet die voor de Post elements weer gecleared worden.
Hoe had ik dat dan gedaan? Ik kan hier eigenlijk niet zoveel over vinden...

Verwijderd

code:
1
2
<xsl:template match="/idboard/posts">
    <myDataSet xmlns="NetFrameWork">

Hier definieer je xmlns voor myDataSet. Die geldt ook voor eventuele kinderen van dat element.
code:
1
2
3
4
5
6
    <xsl:apply-templates/>
    </myDataSet>
</xsl:template>

<xsl:template match="post">
    <Post>

Hier geef je myDataSet een kind. Maar Post heeft geen xmlns attribuut. Dus is xmlns is leeg.
code:
1
2
3
4
    <xsl:apply-templates select="topic"/>
    <LastPost><xsl:value-of select="datetime"/></LastPost>
    </Post>
</xsl:template>

Het is sowieso netter om prefixes te gebuiken als je namespaces gebruikt.