PDA

View Full Version : Nybörjare frågor xml och xsl


adde2
2002-01-22, 20:21
Hej!
Hade tänkt att göra en liten php grej. Där php grejen skulle skicka xml kod till klienten och sen låta en xsl presentera informationen. (Kanske uppåt väggarna dumt att göra så men jag tyckte att det verkade finurligt)
(xml koden är behandlad data från en MySQL databas)
Till min fråga.
Har xsl något emot formulär?
försöker göra ett "<input type="hidden">" utan framgång, den visas fast att den inte borde det.
kod för xml filen:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="logon.xsl"?>
<FORM NAME="checkuser" ACTION="logon.php" METHOD="post">
<INPUT type="hidden" name="next" value="2"/>
<INPUT type="text" name="fname" value=""/>
<INPUT type="password" name="fpassword" value=""/>
</FORM>


xsl filen:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<HTML>
<HEAD>
<TITLE>Logon</TITLE>
</HEAD>
<BODY>
<DIV>
<FORM>
<xsl:attribute name="NAME">
<xsl:value-of select="@NAME"/>
</xsl:attribute>
<xsl:attribute name="ACTION">
<xsl:value-of select="@ACTION"/>
</xsl:attribute>
<xsl:attribute name="METHOD">
<xsl:value-of select="@METHOD"/>
</xsl:attribute>
<DIV>Namn:<BR/>
Lösenord:</DIV>
<xsl:for-each select="FORM/INPUT">
<INPUT>
<xsl:attribute TYPE="TYPE">
<xsl:value-of select="@TYPE"/>
</xsl:attribute>
<xsl:attribute name="NAME">
<xsl:value-of select="@NAME"/>
</xsl:attribute>
<xsl:attribute VALUE="VALUE">
<xsl:value-of select="@VALUE"/>
</xsl:attribute>
</INPUT><BR/>
</xsl:for-each>
</FORM>
</DIV>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>


Gör jag en ändring i xsl filen så visas ändringar, men formulär delen visas fel.



------------------
Följande signatur har inte jag kommit på själv men det betyder inte att den inte är bra.



I ovanstående inlägg reserverar jag mig mot felaktigheter som uppkommit genom felaktig tolkning av ursprungskälla, felaktiga dataströmmar på grund av överklockning eller mental instabilitet. Härmed reserverar jag mig även för övriga fel i såväl åsikter, stavning, grammatiska fel, andra språkliga fel, brister i omdöme och hygien.
Personliga angrepp lämnas personligen IRL eller på sendmeporn@lycos.com där jag förbihåller mig rätten att fullständigt skita i att titta åt dem.

@nders
2002-01-22, 20:24
<INPUT>
<xsl:attribute name="TYPE">
<xsl:value-of select="@TYPE"/>
</xsl:attribute>
<xsl:attribute name="NAME">
<xsl:value-of select="@NAME"/>
</xsl:attribute>
<xsl:attribute name="VALUE">
<xsl:value-of select="@VALUE"/>
</xsl:attribute>
</INPUT>

Eftersom dina input-element i HTML-koden inte har ett giltigt type-attribut visas de som type="text", eftersom det är default.

Mvh,

adde2
2002-01-22, 20:42
Tack för det snabba svaret.
Men kan du utvecka lite mer?
Jag rättade till det du hade "fet markerat", men det blev ingen skillnad.
Antar att jag har gjort mer fel.

------------------
Följande signatur har inte jag kommit på själv men det betyder inte att den inte är bra.



I ovanstående inlägg reserverar jag mig mot felaktigheter som uppkommit genom felaktig tolkning av ursprungskälla, felaktiga dataströmmar på grund av överklockning eller mental instabilitet. Härmed reserverar jag mig även för övriga fel i såväl åsikter, stavning, grammatiska fel, andra språkliga fel, brister i omdöme och hygien.
Personliga angrepp lämnas personligen IRL eller på sendmeporn@lycos.com där jag förbihåller mig rätten att fullständigt skita i att titta åt dem.

@nders
2002-01-22, 20:45
Hur ser den färdiga HTML-koden ut?

Se till att du anger attribut osv i rätt skiftläge, eftersom xml/xsl är skiftlägeskänsligt.

Mvh,

@nders
2002-01-22, 20:48
Förresten, den färdiga html-koden har du nog inte tillgång till, för du transformerar väl på klienten?

Mvh,

adde2
2002-01-22, 20:51
Förtillfället är det all kod.
Har inte gjort mer än, utan sitter och laborerar lite.
Trodde att den koden skulle räcka för åstakomma ett formulär.

Har precis läst igenom en bok om xml blev inspirerad till att testa lite med det. Annars så hade jag nog kört allt med bara php, men så tänkte jag att om jag körde med xml/xsl så om jag vill byta design på användargränssnittet så behöver jag bara pilla med xsl filen och inte behöva göra något med php delen. Vilket kanske skulle underlätta om någon annan skulle ta över/administrera.

------------------
Följande signatur har inte jag kommit på själv men det betyder inte att den inte är bra.



I ovanstående inlägg reserverar jag mig mot felaktigheter som uppkommit genom felaktig tolkning av ursprungskälla, felaktiga dataströmmar på grund av överklockning eller mental instabilitet. Härmed reserverar jag mig även för övriga fel i såväl åsikter, stavning, grammatiska fel, andra språkliga fel, brister i omdöme och hygien.
Personliga angrepp lämnas personligen IRL eller på sendmeporn@lycos.com där jag förbihåller mig rätten att fullständigt skita i att titta åt dem.

@nders
2002-01-22, 20:58
Nu har jag ändrat skiftläget på dina attribut, så det stämmer överens med det du definierat i din xml-fil.

Det verkar fungera bra. Lägg till en submit i din xml-fil och se om formuläret gör vad det är tänkt.

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<HTML>
<HEAD>
<TITLE>Logon</TITLE>
</HEAD>
<BODY>
<DIV>
<FORM>
<xsl:attribute name="name">
<xsl:value-of select="/FORM/@NAME"/>
</xsl:attribute>
<xsl:attribute name="action">
<xsl:value-of select="/FORM/@ACTION"/>
</xsl:attribute>
<xsl:attribute name="method">
<xsl:value-of select="/FORM/@METHOD"/>
</xsl:attribute>
<DIV>Namn:<BR/>
Lösenord:</DIV>
<xsl:for-each select="FORM/INPUT">
<INPUT>
<xsl:attribute name="type">
<xsl:value-of select="@type"/>
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select="@name"/>
</xsl:attribute>
<xsl:attribute name="value">
<xsl:value-of select="@value"/>
</xsl:attribute>
</INPUT><BR/>
</xsl:for-each>
</FORM>
</DIV>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>

Red: Jag ändrade också lite i dina value-of select för FORM-elementet, lade till /FORM/.

Det är dock mycket svårt att se resultatet av det man gör när man transformerar på klientsidan. (Sen var det ett tag sedan jag höll på med detta skall tilläggas. ;) )

Mvh,

[Redigerat av @nders den 22 jan 2002]

adde2
2002-01-22, 21:06
Får det fortfarande inte att funka nåväl får kanske läsa lite mer om xml.
Kan det vara så att min webläsare (IE5.0) inte stödjer xml/xsl så som den borde? Att det är den som spökar?


Tack så mycket för hjälpen i alla fall!

------------------
Följande signatur har inte jag kommit på själv men det betyder inte att den inte är bra.



I ovanstående inlägg reserverar jag mig mot felaktigheter som uppkommit genom felaktig tolkning av ursprungskälla, felaktiga dataströmmar på grund av överklockning eller mental instabilitet. Härmed reserverar jag mig även för övriga fel i såväl åsikter, stavning, grammatiska fel, andra språkliga fel, brister i omdöme och hygien.
Personliga angrepp lämnas personligen IRL eller på sendmeporn@lycos.com där jag förbihåller mig rätten att fullständigt skita i att titta åt dem.

SPiN
2002-01-22, 21:21
Får du det inte att funka, kan det bero på fel content-type.

Sätt till rätt så här, dvs. innan du skickar iväg något från din PHP-sida - förslagsvis högst upp:

header ( "Content-Type: application/xml" );

Jag är för tillfället väldigt seg i huvudet efter att precis ha kommit hem från jobbet, men det kan också vara text/xml som MIME-typ.

Red.} Om det inte funkar, kan du då inte beskriva lite mer vad som är fel? Vad som händer - får du fel på din XML, eller PHP'n?

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --

[Redigerat av SPiN den 22 jan 2002]

adde2
2002-01-22, 21:35
Förtillfället är det enbart xml/xsl kod.
har inte lagt till någon php kod.
hade det från början, men tog bort det.

Postar koden så som den ser ut nu.
(Nu får jag felmedelande när koden "körs")
Det står dock inte vart felet uppstår, utan bara att det är fel. (i xsl filen, kommenterar jag bort xsl filen från xml så får jag inget felmedelande)

xsl filen

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<HTML>
<HEAD>
<TITLE>Logon</TITLE>
</HEAD>
<BODY>
<DIV>
<FORM>
<xsl:attribute name="name">
<xsl:value-of select="/FORM/@NAME"/>
</xsl:attribute>
<xsl:attribute name="action">
<xsl:value-of select="/FORM/@ACTION"/>
</xsl:attribute>
<xsl:attribute name="method">
<xsl:value-of select="/FORM/@METHOD"/>
</xsl:attribute>
<DIV>Namn:<BR/>
Lösenord:</DIV>
<xsl:for-each select="FORM/INPUT/">
<INPUT>
<xsl:attribute name="type">
<xsl:value-of select="@type"/>
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select="@name"/>
</xsl:attribute>
<xsl:attribute name="value">
<xsl:value-of select="@value"/>
</xsl:attribute>
</INPUT><BR/>
</xsl:for-each>
</FORM>
</DIV>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>

xml filen:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="logon.xsl"?>
<FORM name="checkuser" action="logon.php" method="post">
<INPUT type="hidden" name="next" value="2"/>
<INPUT type="text" name="fname" value=""/>
<INPUT type="password" name="fpassword" value=""/>
</FORM>


[Redigerat av adde2 den 22 jan 2002]

@nders
2002-01-22, 21:41
Två saker:

1) Ta bort /FORM/ ur din for-each loop.
2) Du säger att du får ett felmeddelande. Hur ser det ut?

Mvh,

adde2
2002-01-22, 21:48
Hade tagit bort det, funkade ändå inte.
Kopierade det du hade skrivit.
Det funkade, fast jag såg ingen skillnad på koden, något litet fel med andra ord.
Men ursprungsproblemet kvarstår.
Hur blir "hidden" "osynlig"?
som den brukar bli annars...
(Din kod fick fram en 2:a i "hidden" fältet) trevligt...

Jag får tacka så mycket för all hjälp, det har varit lärorikt.

God Natt.

Svårt att låta bli att jämföra er med Moder Theresa ;)

[Redigerat av adde2 den 22 jan 2002]

@nders
2002-01-22, 22:01
När jag testade med din kod, efter mina ändringar, såg jag i alla fall bara två synliga fält, användarnamnsfältet och lösenordsfältet.

Men, jag tror vi återkommer till detta i morgon. :)

Mvh,

Jojoxx
2002-01-23, 06:40
För det första så stödjer väl inte IE5.x XSL utan endast XLST, men det spelar ju inte så stor roll i detta sammanhang, men min fundering är varför transformeringen skall ske på klientsidan (bara för att det är ballt?). Ovanstående borde väl vara bättre att transformera -> HTML på serversidan och skicka detta till klienten. Då kan ju till och med Lynx-surfare se resultatet :)

[Red. felstavning]

------------------
/ J

[Redigerat av Jojoxx den 23 jan 2002]

@nders
2002-01-23, 07:09
Jag håller helt med Jojoxx i synpunkterna om serverside-transformering.

I övrigt kan det ju vara en bra idé att uppgradera sin browser, så man får ett bättre stöd för xml iom MSXML3 (som jag vill minnas ingår i 6:an bl.a.?).

Mvh,

adde2
2002-01-23, 08:54
Godmorgon.

Ok, jo det är ju bättre om alla kan se det, och inte bara någon enstaka webläsare.
Men hur funkar det med transformationen på servern?
(Har precis börjat läsa en till bok om xml kan hända att det står i den)

Min ursprungliga idé var att phpkoden genererar xml som sedan presenteras för klienten med xsl.
Kan man använda xsl för att transformera på servern?



[Redigerat av adde2 den 23 jan 2002]

@nders
2002-01-23, 09:01
Ja, den webbplats jag arbetar med kör uteslutande transformering på servern med xsl. Visserligen använder vi IIS och ASP.

Vi använder MSXML3, och om du kör php i windowsmiljö kan du också göra det. Det har jag dock själv aldrig gjort, men jag har en aning om att SPiN vet hur man bär sig åt.

Men: ja, du kan transformera på servern och skicka färdig html till klienten. Det fungerar bra att göra med IIS/ASP/MSXML3.

Mvh,

SPiN
2002-01-23, 14:43
men jag har en aning om att SPiN vet hur man bär sig åt.

Klart att jag vet. :)
Om du sitter på en Windows-burk kan du använda samma komponent som ASP:arna använder, dvs. Microsoft XML DOM. Annars kan du använda PHP's stöd för DOM eller de "vanliga" XML-funktionerna. Dessa båda måste dock kompileras in i PHP, eller avkommenteras i php.ini.

Beroende på vilken teknik du tänker använda, kan jag ge exempel. Så fråga på. :)

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --

adde2
2002-01-23, 15:17
ok.
Jag kör apache webserver på windows ME.
men jag skulle gärna vilja ha någon lösning som funkar lite varstans.
Typ om man ska ta in på webhotel i framtiden och jag antar att det är vanligt att php körs på en linux/unix maskin.
Så helst ska ju lösning funka på både linux/unix/windows, men det kanske är en utopi att hoppas att det ska funka.

Men om jag bara får välja en lösning som bara funkar på en plattform så väljer jag den lösningen som funkar på apache under windows...

SPiN
2002-01-23, 15:31
Så helst ska ju lösning funka på både linux/unix/windows, men det kanske är en utopi att hoppas att det ska funka.

Då får du använda PHP's funktioner, alltså inte omvägar via ActiveX-dll:er. ( Eller jo, i Windows är ju modulerna dll:er, men de finns även till Linux/Unix som kompileringsalternativ. )

Läs lite på http://www.php.net/xml för PHP's XML Parser-funktioner och http://www.php.net/domxml för att läsa om det inbyggbara stödet för DOM. ( OBS! Inte Microsoft's XML DOM. :) )

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --

adde2
2002-01-23, 15:38
Ok, ska kolla.
Tack så mycket (hemskt mycket) för all hjälp.

SPiN
2002-01-24, 13:42
Här hittade jag en artikel om DOMXML i PHP: http://www.devarticles.com/art/1/44

Kolla in den! :)

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --