[JS] xml transformeren met xsl voor inladen met JS

Pagina: 1
Acties:

  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Onderstaande is al opgelost, zie hier mijn vraag..
(nieuw window .. of scroll ff naar beneden)

Titel verklaard het probleem al een beetje. Ik heb een XML bestand welke ik naar een XHTML structuur converteer dmv XSL.. Als ik gewoon de XML openen zie ik de layout prima zonder foutmeldingen, maar nu probeer ik het in te laden via JS (WebFX scriptje) en zie ik nog alleen maar de XML elementen..

Als ik alert
JavaScript:
1
alert(objXmlDoc.documentElement.xml);

Krijg ik netjes alle XML elementen, maar z'n zijn niet door XSL(t) omgezet!

JavaScript:
1
2
objXmlDoc.documentElement.text
objXmlDoc.documentElement.nodeValue


geven geen resultaat..

Iemand een beter idee ?

edit:

Ik weet dat het met

JavaScript:
1
transformNode

edit:

ofzo kan, maar liever heb ik de gewone methode met <?xml-stylesheet ..?>

[ Voor 33% gewijzigd door r0bert op 15-10-2003 16:18 ]


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Heeft het toevallig geen zin om de pagina gewoon als HTML te openen, zodat je dan de getransformde source van de pagina wel kan opvragen? Of wil je het perce binnen het XML Object blijven doen??

  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Je bedoelt gewoon:
JavaScript:
1
2
3
4
objDoc = document.open('./urlXmlData.xml');

objEl.innerHTML = document.nodeValue??
//?? weet niet hoe ik de inhoud aan moet roepen (geen body in xml doc)

Krijg geen resultaat.. maar ik doe het dan misschien ook niet goed..

[ Voor 4% gewijzigd door r0bert op 15-10-2003 13:19 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 19-08 12:30

André

Analytics dude

cdcatalog.xsl:
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
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
    <h2>My CD Collection</h2>
    <table border="1">
    <tr bgcolor="#9acd32">
      <th align="left">Title</th>
      <th align="left">Artist</th>
    </tr>
    <xsl:for-each select="catalog/cd">
    <tr>
      <td><xsl:value-of select="title"/></td>
      <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>


cdcatalog.xml:
XML:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
</catalog>


De html file:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<html>
  <body>
    <script type="text/javascript">
    // Load XML 
    var xml = new ActiveXObject("Microsoft.XMLDOM")
    xml.async = false
    xml.load("cdcatalog.xml")

    // Load XSL
    var xsl = new ActiveXObject("Microsoft.XMLDOM")
    xsl.async = false
    xsl.load("cdcatalog.xsl")

    // Transform
    document.write(xml.transformNode(xsl))
    
    </script>

  </body>
</html>


Maar waarom je het perse met js gaat doen is mij een raadsel. Door 1 regel in de xml toe te voegen word de xml automatisch getransformeerd:
XML:
1
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>

[ Voor 76% gewijzigd door André op 15-10-2003 13:54 ]


  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Maar waarom je het perse met js gaat doen is mij een raadsel. Door 1 regel in de xml toe te voegen word de xml automatisch getransformeerd:
xml:
XML:
1
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
Ik weet dat het met

JavaScript:
1
 transformNode

ofzo kan, maar liever heb ik de gewone methode met <?xml-stylesheet ..?>
Maar <?xml-stylesheet ..?> werkt bij mij dus niet, want hoe moet ik de data opvragen?

Als ik alle XML bijv in objXmlDoc heb geladen en ik alert(objXmlDoc) krijg ik [object].. dus dan kan ik wel objXmlDoc.documentElement.xml doen, maar dan krijg ik de 'niet-door-xsl-getransformeerde-xml-tags'.. misschien is er wel een andere property waar ik wel de getransformeerde pagina uit kan lezen, maar die kan ik niet vinden iig :'(

Edit:
Heb jouw scriptje even geprobeerd en dat blijkt inderdaad wel te werken :S zit de foto waarschijnlijk ergens anders in mijn scriptje.. ik ga even op zoek

[ Voor 53% gewijzigd door r0bert op 15-10-2003 14:07 ]


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Andre :: Ik denk dat r0bert graag wil dat het XML document met <?xml-stylesheet kan worden geopend alszijnde het een reeds getrsansformeerd HTML (of andere) bestand. Mijn suggestie was om het XML bestand dan als HTML bestand te openen opdat je dan de browser het transformeren op voorhand laat afhandelen (als het goed is), mocht de XSL ervoor zorgen dat je een ander XML bestand krijgt dan weet ik het niet....

  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Yessa! Fout gevonden! Ik had de transformatie niet opgevangen in een variabele, maar ging ervan uit dat het source-bestand (xmlbestand dus) aangepast zou worden.. natuurlijk wordt het aangepaste bestand gereturned en niet over de source heen geschreven! domm! Maar bedankt! ik kan weer verder :)

[ Voor 77% gewijzigd door r0bert op 15-10-2003 14:15 ]


  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Waarom krijg ik hier altijd alleen maar "[object]" terug ?

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function fnLoadXml(strSource)
{
    objXmlDoc   = new ActiveXObject("Microsoft.XMLDOM");
    objXmlDoc.async = false;
    
    objXmlDoc.load(strSource);
    
    return objXmlDoc;
}
    
function fnLoadXmlDataElement(xmlSource, elTarget)
{
    objXml  = fnLoadXml(xmlSource);
    
    document.getElementById(elTarget).innerHTML     =  objXml;
}

Er staat nu dus <?xml-stylesheet?> gedoe in de XML file.. Weet iemand hoe ik het voor elkaar kan krijgen ? Kan wel een 2e keer een XSL eroverheen gooien via JS, dan doet ie het wel, maar da's ook niet echt nuttig :|
Pagina: 1