XML parsen in ASP

Pagina: 1
Acties:

  • party42
  • Registratie: Oktober 2000
  • Laatst online: 09-09 16:05
Dag iedereen, een vraagje. Ik ben bezig om de nieuwstracker van nu.nl te plaatsen op mijn site. Onderstaand een stukje XML wat de parser laat zien:
code:
1
2
3
4
5
6
7
8
9
10
<nu>
<section name="nieuws.hoofd">
<document href="http://nu.nl/document?n=53824">Doden door ongeval Nederlandse touringcar in Frankrijk (video)</document>
<document href="http://nu.nl/document?n=53839">Politie wil nieuw type traangasgranaat invoeren </document>
<document href="http://nu.nl/document?n=53830">Verkeersbord met laagvliegende uilen in trek</document>
<document href="http://nu.nl/document?n=53827">Vice-president Cheney naar Israël</document>
<document href="http://nu.nl/document?n=53826">Levenslang voor brandstichter backpack-hotel</document>
<document href="http://nu.nl/document?n=53825">Centrum-rechts wint verkiezingen in Portugal</document>
</section>
</nu>

Nu ben ik zover dat ik wat ASP betreft gewoon de XML als source kan opgeven op deze manier (toch?):
code:
1
2
set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.load("http://nu.nl/deeplink_xml")

zo zou de xml "ingeladen" moeten zijn. Echter, hoe laat ik nu de inhoud van het bestand daadwerkelijk zien? Met andere woorden, hoe kan ik in de asp of mogelijk XSL laten afzoeken naar verschillende sections?

Wellicht met een getelementsbytagname("section") oid?

aub advies!

Everyday's an endless stream, of cigarettes and magazines...


  • Devil
  • Registratie: Oktober 2001
  • Niet online

Devil

King of morons

Bijbehorende xsl maken die voor het afzoeken ed. zorgt.
Dan de xsl laden in je asp (gaat net zo als een xml laden)
EN dan iets dergelijks:
echo xml.transformNode(xsl)

Je moet even de juiste syntax zelf uitzoeken, maar er zin vast wel voorbeelden te vinden met google.

After all, we are nothing more or less than what we choose to reveal.


  • party42
  • Registratie: Oktober 2000
  • Laatst online: 09-09 16:05
ok. maar hoe kan ik binnen de XSL zoeken naar de SECTION names?

Kan dit gewoon met een xsl:value-of select="SECTION"

oid?

Everyday's an endless stream, of cigarettes and magazines...


  • Devil
  • Registratie: Oktober 2001
  • Niet online

Devil

King of morons

Op maandag 18 maart 2002 13:35 schreef party42 het volgende:
ok. maar hoe kan ik binnen de XSL zoeken naar de SECTION names?

Kan dit gewoon met een xsl:value-of select="SECTION"

oid?
<xsl:template match="section">

</xsl:template> :?

Ik zou gewoon even op zoek gaan naar een goeie xsl tutorial daar staat alles duidelijk uitgelegd.

After all, we are nothing more or less than what we choose to reveal.


  • party42
  • Registratie: Oktober 2000
  • Laatst online: 09-09 16:05
ksnap er echt nix van
hij laat gewoon nix zien

:'(

ASP:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<%
  set xml = Server.CreateObject("Microsoft.XMLDOM")
  xml.load("http://nu.nl/deeplink_xml")
  
  set xsl = Server.CreateObject("Microsoft.XMLDOM")
  xsl.load(Server.MapPath("test.xsl"))
  
  Response.Write xml.transformNode(xsl)
  
  set xsl = nothing
  set xml = nothing
%>

XSL:
code:
1
2
3
4
5
6
7
8
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">

....

</xsl:template>
</xsl:stylesheet>

Everyday's an endless stream, of cigarettes and magazines...


  • Devil
  • Registratie: Oktober 2001
  • Niet online

Devil

King of morons

Op maandag 18 maart 2002 14:08 schreef party42 het volgende:
ksnap er echt nix van
hij laat gewoon nix zien

:'(

ASP:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<%
  set xml = Server.CreateObject("Microsoft.XMLDOM")
  xml.load("http://nu.nl/deeplink_xml")
  
  set xsl = Server.CreateObject("Microsoft.XMLDOM")
  xsl.load(Server.MapPath("test.xsl"))
  
  Response.Write xml.transformNode(xsl)
  
  set xsl = nothing
  set xml = nothing
%>

XSL:
code:
1
2
3
4
5
6
7
8
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">

....

</xsl:template>
</xsl:stylesheet>
Zet eens gewoon statische tekst in je root template, als het goed is moet je asp pagina dan die tekst als output geven. Anders is er iets mis met je asp syntax.

After all, we are nothing more or less than what we choose to reveal.


  • party42
  • Registratie: Oktober 2000
  • Laatst online: 09-09 16:05
goede tip! Ik heb nu dit:
code:
1
2
3
4
5
6
7
8
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">

pietje puk!

</xsl:template>
</xsl:stylesheet>

en de browser geeft nu Pietje Puk! weer dus ik zou er vanuit mogen gaan dat de fout niet in de ASP zit... Tenminste, de XSL wordt weergegeven!


edit:

zo gauw ik echter een xsl:for-each select erbij zet dan komt hij met de foutmelding:
"The data necessary to complete this operation is not yet available".

Everyday's an endless stream, of cigarettes and magazines...


  • Devil
  • Registratie: Oktober 2001
  • Niet online

Devil

King of morons

Op maandag 18 maart 2002 14:16 schreef party42 het volgende:
goede tip! Ik heb nu dit:
code:
1
2
3
4
5
6
7
8
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">

pietje puk!

</xsl:template>
</xsl:stylesheet>

en de browser geeft nu Pietje Puk! weer dus ik zou er vanuit mogen gaan dat de fout niet in de ASP zit... Tenminste, de XSL wordt weergegeven!
Inderdaad, dus dan moet je even uitzoeken wat er misgaat in je xsl.
Ik zou eens dit toevoegen:
code:
1
2
3
<xsl:template match="text()">
  <xsl:value-of select="."/>
</xsl:template>

En in je root template <xsl:apply-templates/>
Als het goed is moet hij nu alle content uit de xml uitspugen. Zals dat werkt, dan weet je dat het hele parsen etc goed gaat en je dus gewoon een goeie xsl moet schrijven.

After all, we are nothing more or less than what we choose to reveal.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Probeer je XSL Transformatie anders eerst eens gewoon uit in IE6/Mozilla of een XSLT processor. Je krijgt dan wellicht wat meer inzicht in wat er mis is met je transformatie. Sowieso kan het niet kwaad om eerst even los van dit probleem te experimenteren met XSLT (en documentatie daarvan te raadplegen).

Je gebruikt trouwens nog de Working Draft namespace van XSLT, die nog stamt van voor de recommendation uit 1999. Je kunt beter de namespace van deze W3C Recommendation gebruiken...

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


  • party42
  • Registratie: Oktober 2000
  • Laatst online: 09-09 16:05
ok
het probleem is denk ik gedefinieerd...
parsen gaat prima. met andere woorden.
als ik de pagina opzoek en opsla als xml document dan werkt het prima:
ASP:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<%
  set xml = Server.CreateObject("Microsoft.XMLDOM")
  xml.load(Server.MapPath("deeplink_xml.xml"))
  'xml.load("http://nu.nl/deeplink_xml")
  
  set xsl = Server.CreateObject("Microsoft.XMLDOM")
  xsl.load(Server.MapPath("test.xsl"))
  
  Response.Write xml.transformNode(xsl)
  
  set xsl = nothing
  set xml = nothing
%>

XSL:
code:
1
2
3
4
5
6
7
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" xmlns:dt="urn:schemas-microsoft-com:datatypes">
<xsl:template match="/">
    <xsl:apply-templates/>
      <xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>

Haal ik echter de trema in de ASP weg (en ik laat em op inet zoeken) dan krijg ik de melding:
The data necessary to complete this operation is not yet available.

Everyday's an endless stream, of cigarettes and magazines...


  • Devil
  • Registratie: Oktober 2001
  • Niet online

Devil

King of morons

Op maandag 18 maart 2002 14:40 schreef party42 het volgende:
[...knip...]
Ik raad je tog echt aan om wat dieper in het onderwerp XML/XSL(T) te duiken, omdat je er op deze manier niet uitkomt. Ook is het handig om onderzoek te doen naar het XMLDOM object.

Ok, nog 1 hintje dan: xml.async = false zorgt ervoor dat hij pas gaat parsen als het hele xml document geladen is, anders begint hij al als het document er nog niet is ;)

After all, we are nothing more or less than what we choose to reveal.

Pagina: 1