[XML/XSL] Ik word gek?!

Pagina: 1
Acties:

  • didio
  • Registratie: Maart 2001
  • Laatst online: 01-04 09:19

didio

didio.nl

Topicstarter
Dit werkte in een ander projectje, ik kopieer de hele zaak en het werkt niet meer, waarschijnenlijk zie ik een heeeel klein dingetje over het hoofd, maar ik zit er nu al 2 uur op te sleutelen.

Ik haal met een asp file data uit de database en pleur dat in XML formaat, de output van die file is:
code:
1
2
3
4
5
6
7
8
9
<?xml version="1.0" ?> 
<ADSLMC>
 <ForumTopic>
  <ForumMessageID>1</ForumMessageID> 
  <Subject>test</Subject> 
  <Message>test</Message> 
  <Date>9/26/2001</Date> 
 </ForumTopic>
</ADSLMC>

Ik heb ff een simple XSL filetje gemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" ?>
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  <xsl:template match="/">
   <html>
   <body>
    <xsl:for-each select="ADSLMC/ForumTopic">
     <xsl:value-of select="Subject"/>
    </xsl:for-each>
   </body>
  </html>
 </xsl:template>
</xsl:stylesheet>

En ik plak dit geheel aan elkaar met deze asp file.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%
Dim objHTTP
Dim objXML
Dim objXSL

Set objHTTP = CreateObject("Microsoft.XMLHTTP")
objHTTP.Open "GET", "http://127.0.0.1/forums/get_topics.asp?id=1, False
objHTTP.Send

Set objXML = objHTTP.ResponseXML
Set objXSL = CreateObject("Microsoft.XMLDOM")
objXSL.Async = False
objXSL.Load(Server.MapPath("test.xsl"))

Response.Write(objXML.TransformNode(objXSL))

Set objHTTP = Nothing
Set objXML = Nothing
Set objXSL = Nothing
%>

Ziet iemand hier iets in wat niet correct is?

weinig tot niks..


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Over het algemeen is het mooier om for-each te vermijden. Je moet het recusieve karakter en de default templates van XSL gebruiken.

Voorbeeldje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" ?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

    <xsl:template match="ADSLMC">
        <html>
        <body>
            <xsl:apply-templates/>
        </body>
        </html>
    </xsl:template>

    <xsl:template match="ForumTopic">
        <xsl:value-of select="Subject/text()"/>
    <xsl:template>

</xsl:stylesheet>

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • didio
  • Registratie: Maart 2001
  • Laatst online: 01-04 09:19

didio

didio.nl

Topicstarter
Op woensdag 26 september 2001 13:07 schreef mbravenboer het volgende:
Voorbeeldje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" ?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

    <xsl:template match="ADSLMC">
        <html>
        <body>
            <xsl:apply-templates/>
        </body>
        </html>
    </xsl:template>

    <xsl:template match="ForumTopic">
        <xsl:value-of select="Subject/text()"/>
    <xsl:template>

</xsl:stylesheet>
Als ik dit gebruik als XSL file krijg ik deze error:
code:
1
2
3
4
msxml3.dll (0x80004005)
The stylesheet does not contain a document element.
The stylesheet may be empty, or it may not be a well-formed XML document. 
/forums/default.asp, line 15

Regel 15 is:
code:
1
Response.Write(objXML.TransformNode(objXSL))

voor de rest van de default.asp page zie boven.

weinig tot niks..


Verwijderd

Je hebt de namespace verkeerd, vermoedelijk van de workingdraft. Het moet:
code:
1
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


zijn.
Een XMLParser vouwt als het goed is eerst alle namespaces uit en parsed dus niet <xsl:template> maar iets als <http://www.w3.org/1999/XSL/Transform:stylesheet> bij jou maakt hij daar <http://www.w3.org/TR/WD-xsl:stylesheet> van, welke hij dus waarschijnlijk niet herkent.

Meer info zie: http://www.w3.org/TR/xslt sectie 2.1

  • didio
  • Registratie: Maart 2001
  • Laatst online: 01-04 09:19

didio

didio.nl

Topicstarter
Op woensdag 26 september 2001 13:20 schreef solar het volgende:
Je hebt de namespace verkeerd, vermoedelijk van de workingdraft. Het moet:
code:
1
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Erg bedankt voor de oplettendheid, ik heb het aangepast, maar het werkt nog steeds niet. En bij mijn vorige project waar dit wel werkte had ik die regel exact hetzelfde dus het is dan misschien wel fout maar het is niet het probleem.

weinig tot niks..


  • didio
  • Registratie: Maart 2001
  • Laatst online: 01-04 09:19

didio

didio.nl

Topicstarter
Nog even voor alle duidelijkheid, ik krijg dus helemaal geen errors, ik zie gewoon een blanco pagina, als ik wat text zet in mijn XSL page zie ik die op het scherm, dus alles werkt verder goed, behalve dat de XML data net verwerkt word.

weinig tot niks..


Verwijderd

Ik heb je XSL eventjes met de hand door de .NET XSLT engine heen gehaald. Daar ligt het niet aan. Het geeft het verwachte resultaat:
code:
1
<html><body>test</body></html>

Het ligt dus aan: Inladen XML file of printen van de uitvoer. Ik heb momenteel geen server draaien waar ik asp kan testen dus ik kan je eventjes niet verder helpen.

  • didio
  • Registratie: Maart 2001
  • Laatst online: 01-04 09:19

didio

didio.nl

Topicstarter
Oke guys,

Ik heb het gevonden, het zat hem in de XML file, terwijl Explorer die gewoon goed weergaf, vandaar dat ik dacht dat daar geen fout in zat. Allemaal bedankt voor de antwoorden.

weinig tot niks..

Pagina: 1