XML:
<?xml version="1.0" encoding="UTF-8" ?> <?xml-stylesheet href="rozklad.xsl" type="text/xsl" ?> <!DOCTYPE rozklad SYSTEM "rozklad.dtd"> <rozklad> <kurs nr = "168"> <przystanki> <przystanek> <nazwa>Trzymiasta</nazwa> <przyjazd></przyjazd> <odjazd>07:10</odjazd> </przystanek> <przystanek> <nazwa>Warszawa</nazwa> <przyjazd>07:13</przyjazd> <odjazd>07:13</odjazd> </przystanek> <przystanek> <nazwa>Wilno</nazwa> <przyjazd>07:16</przyjazd> <odjazd></odjazd> </przystanek> <rodzaj> <typ>F</typ> <typ>E</typ> <typ>k</typ> </rodzaj> </kurs> <kurs nr = "23"> <przystanki> <przystanek> <nazwa>Wśród mieście</nazwa> <przyjazd></przyjazd> <odjazd>06:20</odjazd> </przystanek> <przystanek> <nazwa>Dolne miasto</nazwa> <przyjazd>06:25</przyjazd> <odjazd>06:25</odjazd> </przystanek> <przystanek> <nazwa>Dolne miasto</nazwa> <przyjazd>06:45</przyjazd> <odjazd></odjazd> </przystanek> </przystanki> <rodzaj> <typ>F</typ> <typ>E</typ> <typ>k</typ> </rodzaj> </kurs> </rozklad>
DTD:
<!ELEMENT rozklad (kurs+)> <!ELEMENT kurs (przystanki+,rodzaj+)> <!ATTLIST kurs nr CDATA #REQUIRED> <!ELEMENT przystanki (przystanek+)> <!ELEMENT przystanek (nzawa|przyjazd|odjazd)*> <!ATTLIST przystanek przez CDATA #IMPLIED> <!ELEMENT nazwa (#PCDATA)> <!ELEMENT przyjazd (#PCDATA)> <!ELEMENT odjazd (#PCDATA)> <!ELEMENT rodzaj (typ+)> <!ELEMENT typ (#PCDATA)>
XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <xsl:call-template name="rozklad"> <xsl:with-param name="plik" select="."/> </xsl:call-template> </body> </html> </xsl:template> <xsl:template name="rozklad"> <xsl:param name="plik"/> <xsl:for-each select="$plik/rozklad/kurs"> <xsl:value-of select="@nr"/> </xsl:for-each> </xsl:template> </xsl:stylesheet>
i jak oglądam xml'a to wypisuje mi 16823, czyli tak jak powinno (kurs 168 i 23)
ale za pomocą html kicha, nic i oto html:
<html> <head> <link href="rozklad.css" rel="Stylesheet" type="text/css" /> <script> var xml, xsl, xsltmp; function init(){ xml = new ActiveXObject('MSXML2.DOMDocument.4.0'); xml.async = false; xml.load('rozklad.xml'); xsl=new ActiveXObject('MSXML2.FreeThreadedDOMDocument.4.0'); xsl.async = false; xsl.load('rozklad.xsl'); xsltmp = new ActiveXObject("Msxml2.XSLTemplate.4.0"); xsltmp.stylesheet = xsl; show(''); } function show(obj){ var xslProc = xsltmp.createProcessor(); xslProc.input = xml; xslProc.addParameter("cos",obj,""); xslProc.transform(); document.getElementById('innerBody').innerHTML = xslProc.output; } </script> </head> <body onload="init();"> </body> </html>