Lindacharlotta Postad 27 november, 2008 Share Postad 27 november, 2008 Jag har en xml-sida med info, kan jag på något sätt visa upp informationen på en html-sida? Vill inte visa taggarna utan bara info mellan taggarna. Vad behöver jag för att html ska kunna avläsa xml-sidan? Någon som kan ge mig en hint var jag kan hitta information om detta, gör mig glad... :-) Tack på förhand! Mvh Linda Länk till kommentar Dela på andra webbplatser More sharing options...
.M Postad 27 november, 2008 Share Postad 27 november, 2008 Jag brukar använda något som heter xslt. Det är ett "stylesheet" som gör om xml till html. Det finns oftast stöd för xslt inbyggt i webläsare. Men om man vill så kan man använda komponenter på webservern som gör själva omvandlingen åt en. För att tipsa om hur du gör på servern så får du först förklara om du har något scriptspråk installerat, tillexempel asp eller php eller liknande. Sen finns här en resurs som beskriver xslt med massor av exempel. http://www.zvon.org/xxl/XSLTreference/Output/ Länk till kommentar Dela på andra webbplatser More sharing options...
Lindacharlotta Postad 27 november, 2008 Trådskapare Share Postad 27 november, 2008 XHTML-sidan måste kunna ses av alla och i alla webbläsare. Vanlig ASP har jag kört tidigare, så det finns installerat. Vilket är bäst att använda sig utav? Linda Länk till kommentar Dela på andra webbplatser More sharing options...
.M Postad 27 november, 2008 Share Postad 27 november, 2008 Jag brukar faktiskt använda komponenterna som är inbyggda i ASP. Fungerar oftast finfint. Kort exempel: Dim xml Dim xsl Dim html Set xml = Server.CreateObject("MSXML2.DomDocument") xml.Async = false xml.Load(Server.MapPath("xmlsida.xml")) Set xsl = Server.CreateObject("MSXML2.DomDocument") xsl.Async = false xsl.Load(Server.MapPath("xslsida.xsl")) html = xml.TransformNode(xsl) I Exemplet så kommer html få din html-kod som en vanlig sträng. Och den kan du skriva ut med Response.Write. Beroende på hur du väljer att skriva din xsl så kan du göra en hel sida, eller en del av en sida. Tillexempel bara en tabell. Länk till kommentar Dela på andra webbplatser More sharing options...
Lindacharlotta Postad 27 november, 2008 Trådskapare Share Postad 27 november, 2008 Vad är skillanden mellan denna koden och din: http://www.stardeveloper.com/articles/display.html?article=2000072801&page=2 <% Option Explicit Response.Buffer = True Dim xml Set xml = Server.CreateObject("Microsoft.XMLDOM") xml.async = False xml.load (Server.MapPath("page.xml")) Dim title, heading, paragraph, testHTML title = xml.documentElement.childNodes(0).text heading = xml.documentElement.childNodes(1).text paragraph = xml.documentElement.childNodes(2).text testHTML = xml.documentElement.childNodes(3).text Set xml = Nothing %> <html> <head> <title><%= title %></title> </head> <body> <h3 align="center"><%= heading %></h3> <p align="center"><% = paragraph %></p> <div align="center"><%= testHTML %></div> </body> </html> Vill bara förstå det hela och inte bara kopiera kod... :-) [inlägget ändrat 2008-11-27 11:26:53 av Lindacharlotta] Länk till kommentar Dela på andra webbplatser More sharing options...
.M Postad 27 november, 2008 Share Postad 27 november, 2008 Skillnaden är väll främst att dom har valt att hämta element för element och presentera värdet av detta från xml-koden. Klart görbart, men jag tycker personligen att det är "lite knepigt". Till exempel är xml.documentElement.childNodes(2).text ganska obegripligt. Men i xsl så kan du beskriva det som /boklista/bok/titel tillexempel. Något som jag tycker är enklare. Länk till kommentar Dela på andra webbplatser More sharing options...
Lindacharlotta Postad 27 november, 2008 Trådskapare Share Postad 27 november, 2008 Ok, jag har byggt upp den som du har gjort och det fungerar jättebra..Förutom en liten sak... :-) Tggen nedan finns i xml filen som skapas och den vägrar köra sålänge jag har xmlns="Bilmodell" med. Vad är det för tagg och vad gör den? <SearchD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="Bilmodell"> Tar jag bort den så fungerar som jag sagt allting bra. Tyvärr måste jag ha den... :-( Sedan en fråga till om jag vill ändra font och storlek är det i XSL-dok jag skriver in den, isåfall vad skriver jag? Tack på förhand... :-) Linda Länk till kommentar Dela på andra webbplatser More sharing options...
.M Postad 27 november, 2008 Share Postad 27 november, 2008 xmlns är ett så kallat namespace. Men om jag ska vara helt ärlig så har jag glömt exakt vad det är bra för. Och för att fnula med typsnitt och sånt så görs det i xsl. Xsl skapar ju html-kod så du gör ungefär på samma sätt som i html. Och css-klasser brukar vara det bästa. <xsl:template match="/"> <span class="MyClass"><xsl:value-of select="/SearchD/title" /></span> </xsl:template> Länk till kommentar Dela på andra webbplatser More sharing options...
Lindacharlotta Postad 27 november, 2008 Trådskapare Share Postad 27 november, 2008 Ok, jag får googla vidare på den... Konstigt att inget visas om den finns.... :-( Men skriver jag in värdena för MyClass i XSL med? jag skulle vilja ha mindre storlek på fonten gällande i hela min tabell och varannan rad färgad? / Linda Länk till kommentar Dela på andra webbplatser More sharing options...
.M Postad 27 november, 2008 Share Postad 27 november, 2008 Att göra varannan rad färgad är inte så svårt. Dock får man skriva lite logik för att klura på om positionen på det aktuella elementet är jämn eller ojämn. Lite knepigt. Har dock för stunden ingen exempelkod för detta. Värdena för MyClass skriver du i din css-mall. Men jag tycker att du ska börja med att få xsl-transformationen att fungera. På så vis ser du ju exakt hur html-koden ser ut och kan börja fylla på med css-klasser och liknande. När du ser hur din xsl-kod beter sig och hur resultatet ser ut i html så blir det genast mycket enklare. Länk till kommentar Dela på andra webbplatser More sharing options...
Jonny Bergdahl Postad 27 november, 2008 Share Postad 27 november, 2008 värdet för xmlns anger i vilket namespace en node ligger. Finns inget värde för xmlns angivet så ligger noden utanför namespace. Problemet med detta är att det påverkar select-satsen i XSL. /SearchD/title letar reda på noden title i en XML-fil UTAN namespace. /prefix:Search/prefix:title letar reda på noden title i en XML-fil MED namespace, "prefix" är en alias som i ditt fall ska peka ut namespace "Bilmodell". Jag jobbar inte i ASP längre, så jag är inte säker på hur det fungerar i MSXML2, men på http://www.roblocher.com/technotes/xmlnotes.aspx beskrivs en lösning. Jag gissar att du behöver lägga till: xsl.SetProperty("SelectionNamespaces", "xmlns:a='Bilmodell'"); Ändra sedan dina söksträngar så dom använder prefixet a: <xsl:value-of select="/a:SearchD/a:title" /> Mvh; /jb Länk till kommentar Dela på andra webbplatser More sharing options...
Lindacharlotta Postad 28 november, 2008 Trådskapare Share Postad 28 november, 2008 Tack för svaret.. Men får det inte att fungera Var lägger jag dennasträng? i xsl? xsl.SetProperty("SelectionNamespaces", "xmlns:a='Bilmodell'"); Så här ser min xsl ut: <?xml version="1.0" encoding="ISO-8859-1"?> <!-- Edited by XMLSpy® --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method='html' version='1.0' encoding='UTF-8' indent='yes'/> <xsl:SetProperty="SelectionNamespaces", "xmlns:a="Bilmodell"> <xsl:template match="/"> <html> <head><title>Linda testar XML</title></head> <body> <xsl:for-each select="a:SearchD/a:SearchResults/a:TSearchResult"> <xsl:value-of select="fätett"/> <xsl:value-of select="fälttva"/> <xsl:value-of select="fälttre"/> <xsl:value-of select="fältfyra"/> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet> och min sträng i XML, som jag inte kan göra några ändringar i.: <SearchD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="Bilmodell"> Verkligen fast, tacksam för hjälp... / Linda Länk till kommentar Dela på andra webbplatser More sharing options...
Jonny Bergdahl Postad 28 november, 2008 Share Postad 28 november, 2008 Min gissning är att koden borde se ut så här: Set xsl = Server.CreateObject("MSXML2.DomDocument") xsl.Async = false xsl.SetProperty("SelectionNamespaces", "xmlns:a='Bilmodell'"); xsl.Load(Server.MapPath("xslsida.xsl")) Alternativt kan du istället prova att lägga till den i xsl-filen: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="Bilmodell"> Sen måste du lägga till prefixet på samtliga select i xsl-filen, alltså även i "value-of"-noderna: <xsl:value-of select="a:fätett"/> Mvh; /jb Länk till kommentar Dela på andra webbplatser More sharing options...
Lindacharlotta Postad 28 november, 2008 Trådskapare Share Postad 28 november, 2008 Tack för att du hjälper mig.. Jag får detta körningsfelet i min asp-fil: Feltyp: Kompileringsfel i Microsoft VBScript (0x800A0414) Det går inte att använda parenteser när en Sub anropas. /test/SearchTest.asp, line 10, column 61 xsl.SetProperty("SelectionNamespaces", "xmlns:a='Bilmodell'"); ------------------------------------------------------------^ Då min kod i ASP-dok ser ut: <% set xml = Server.CreateObject("Microsoft.XMLDOM") xml.async = false xml.load(Server.MapPath("SearchTest.xml")) set xsl = Server.CreateObject("MSXML2.DomDocument") xsl.async = false xsl.SetProperty("SelectionNamespaces", "xmlns:a='Bilmodell'"); xsl.load(Server.MapPath("SearchTest.xsl")) Response.Write(xml.transformNode(xsl)) %> även om jag tar bort ; rfter bilmodell. Har provat ta bort det i asp och lägga in det i XSL <?xml version="1.0" encoding="ISO-8859-1"?> <!-- Edited by XMLSpy® --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="Bilmodell"> <xsl:output method='html' version='1.0' encoding='UTF-8' indent='yes'/> <html> <head><title>Linda testar om det fungerar</title></head> <body> <table bgcolor="#eeeeee" border="1" width="550" bordercolor="#cccccc" cellpadding="0" cellspacing="0"> <tr> <td> <table> <tr> <td><span style="font-size:11px"><b>Pid: </b></span></td> <td><span style="font-size:11px"><xsl:value-of select="a:SearchD/a:SearchResults/a:SearchResult/a:Test"/></span></td> </tr> </table> </td> </tr> </table> </body> </html> Får då felkod: Feltyp: MsXml3.dll (0x80004005) Formatmallen innehåller inte ett dokumentelement. Formatmallen kan vara tom eller så är det inte ett korrekt strukturerat XML-dokument. /test/SearchTest.asp, line 14 Kan du se vad jag gör fel? [inlägget ändrat 2008-11-28 10:31:10 av Lindacharlotta] Länk till kommentar Dela på andra webbplatser More sharing options...
Jonny Bergdahl Postad 28 november, 2008 Share Postad 28 november, 2008 Sorry, har tydligen helt förträngt syntaxen i VBScript. Ska väl stå nåt i stil med nedanstående istället. xsl.SetProperty "SelectionNamespaces", "xmlns:a='Bilmodell'" Vad gäller din XSL-fil saknas den avslutande taggen <xsl:stylesheet> . Mvh; /jb Länk till kommentar Dela på andra webbplatser More sharing options...
Lindacharlotta Postad 28 november, 2008 Trådskapare Share Postad 28 november, 2008 Jag som hade stavat fel på ett fält... :-) Tack för all din hjälp... Du kanske har någon länk, spm ajg kan läsa mig till hur jag färgar varannan rad? /Linda [inlägget ändrat 2008-11-28 11:01:49 av Lindacharlotta] Länk till kommentar Dela på andra webbplatser More sharing options...
Jonny Bergdahl Postad 28 november, 2008 Share Postad 28 november, 2008 KAn det vara några konstigheter med min sökväg: Säkerligen, men det kan jag ju inte svara på utan att veta hur din XML-fil ser ut. Mvh; /jb Länk till kommentar Dela på andra webbplatser More sharing options...
Lindacharlotta Postad 28 november, 2008 Trådskapare Share Postad 28 november, 2008 En liten fråga till: Den skriver ut alla värdena korrekt. Men jag vill ha en loopad lista, som fungerade bra innan. Men ska kanske: <xsl:value-of select="a:SearchD/a:SearchResults/a:TSearchResult">se annorlunda ut för den skriver inte ut några resultat alls. & inget felmeddelande visas...? <xsl:for-each [color="#ff0000"]select="a:SearchD/a:SearchResults/a:TSearchResult">[/color] <tr> <td><span style="font-size:11px"><xsl:value-of select="a:SearchD/a:SearchResults/a:TSearchResult/a:Rid"/></span></td> <td><span style="font-size:11px"><xsl:value-of select="a:SearchD/a:SearchResults/a:TSearchResult/a:Orderer"/></span></td> <td><span style="font-size:11px"><xsl:value-of select="a:SearchD/a:SearchResults/a:TSearchResult/a:Status"/></span></td> <td><span style="font-size:11px"><xsl:value-of select="a:SearchD/a:SearchResults/a:TSearchResult/a:SampleDateTime"/></span></td> </tr> </xsl:for-each> Mvh Linda Länk till kommentar Dela på andra webbplatser More sharing options...
Jonny Bergdahl Postad 28 november, 2008 Share Postad 28 november, 2008 Select-satsen i for-each "ställer" context på den hittad nod, så inne i loopen ska du hämta värdena relativt. Du kan också behöva lägga till en / först på select i for-each, beroende på var i din kod den ligger. Båda exemplen nedan ska ge samma resultat. <xsl:for-each select="/a:SearchD/a:SearchResults/a:TSearchResult"> <xsl:text>Orderer:</xsl:text> <xsl:value-of select="a:Orderer"/> </xsl:for-each> <xsl:for-each select="/a:SearchD/a:SearchResults"> <xsl:for-each select="a:TSearchResult"> <xsl:text>Orderer:</xsl:text> <xsl:value-of select="a:Orderer"/> </xsl:for-each> </xsl:for-each> Länk till kommentar Dela på andra webbplatser More sharing options...
Lindacharlotta Postad 28 november, 2008 Trådskapare Share Postad 28 november, 2008 Tackar, det fungerade perfekt! Tack för all din hjälp... :-) Då passar jag på att ställa en sista fråga.. :-) Varannan rad färg? vet du var jag kan läsa mig till info om det? Mvh Linda Länk till kommentar Dela på andra webbplatser More sharing options...
.M Postad 28 november, 2008 Share Postad 28 november, 2008 Här kommer ett litet exempel. xml-fil <?xml version="1.0" encoding="UTF-8"?> <minxml> <lista> <rad>Rad ett</rad> <rad>Rad två</rad> <rad>Rad tre</rad> </lista> </minxml> Xsl-fil <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:output method="html"/> <xsl:template match="/"> <html> <head> <title/> </head> <body> <table> <thead> <tr> <th>TESTAR</th> </tr> </thead> <tbody> <xsl:for-each select="/minxml/lista/rad"> <xsl:variable name="minvariabel"> <xsl:choose> <xsl:when test="position() mod 2"> <xsl:value-of select="'white'"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="'grey'"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <tr style="background-color:{$minvariabel}"> <td> <xsl:value-of select="."/> </td> </tr> </xsl:for-each> </tbody> </table> </body> </html> </xsl:template> </xsl:stylesheet> Resultat <html xmlns:fo="http://www.w3.org/1999/XSL/Format"> <head> <META http-equiv="Content-Type" content="text/html; charset=UTF-16"> <title></title> </head> <body> <table> <thead> <tr> <th>TESTAR</th> </tr> </thead> <tbody> <tr style="background-color:white"> <td>Rad ett</td> </tr> <tr style="background-color:grey"> <td>Rad två</td> </tr> <tr style="background-color:white"> <td>Rad tre</td> </tr> </tbody> </table> </body> </html> Länk till kommentar Dela på andra webbplatser More sharing options...
Jonny Bergdahl Postad 28 november, 2008 Share Postad 28 november, 2008 Då ska du titta närmare på XPath-funktioner, exempelvis på http://www.w3schools.com/xpath/xpath_functions.asp. Notera bara att inte alla XPath-funktioner är tillgängliga från en XSL-mall. För att besvara din specifika fråga, så kan du testa med position(), den räknar upp en för varje träff i for-each-satsen. <xsl:if test="position() mod 2 = 0"> <xsl:text>Jämn rad</xsl:text> </xsl:if> <xsl:if test="position() mod 2 != 0"> <xsl:text>Udda rad</xsl:text> </xsl:if> Mvh; /jb Länk till kommentar Dela på andra webbplatser More sharing options...
Lindacharlotta Postad 28 november, 2008 Trådskapare Share Postad 28 november, 2008 Fick ihop det.. :-) Tack för hjälpen! / Linda [inlägget ändrat 2008-11-28 13:03:33 av Lindacharlotta] Länk till kommentar Dela på andra webbplatser More sharing options...
Rekommendera Poster
Arkiverat
Det här ämnet är nu arkiverat och är stängt för ytterligare svar.