XML till HTML via XSLT - Någon som e vass :)

Permalänk
Musikälskare

XML till HTML via XSLT - Någon som e vass :)

Vill göra om ett XML document till HTML via XSLT men har aldrig gjort de innan

Har fått det att fungera så långt att allt skrivs ut i HTML utom bilden, den syns inte, hur ska jag få fram den? Koden för bilden finns i källan men den visas inte

XML koden:

<?xml version="1.0" encoding="ISO-8859-1"?><?xml-stylesheet type="text/xsl" href="_test.xsl"?><weather> Lund<img src="bild.png"></img>2° / 17°</weather>

XLS koden

<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" version="4.0" encoding="iso-8859-1" indent="yes"/> </xsl:stylesheet>

http://www.w3schools.com/xsl/el_output.asp

Visa signatur

❀ Monitor: ASUS Swift 27" @ 1440p/165Hz ❀ CPU: Ryzen 7700X ❀ Cooling: Corsair H170i ELITE 420mm ❀ GPU: MSI 3080 Ti SUPRIM X ❀ Memory: Corsair 32GB DDR5 Vengeance ❀ Motherboard: ASUS Crosshair X670E Hero ❀ M.2: Samsung 980 Pro ❀ PSU: Corsair HX1200 ❀ Chassi: Corsair 7000X ❀ Time Spy: 19 340

📷 Mina fotografier
🎧 Vad lyssnar du på just nu?

Permalänk
Medlem

I ditt XSL-dokument måste du skapa en template och matcha den mot noder i ditt XML-dokument via XPATH. Har du provat exemplet på http://www.w3schools.com/xsl/xsl_transformation.asp ?

Följande hade skrivit ut innehållet inom weather-taggen.

<xsl:template match="/"> <xsl:value-of select="."/> </xsl:template>

Men detta kommer inte funka eftersom du blandar två olika XML-format, ren XML och HTML, i ditt XML-dokument. Och första taggen i dokumentet definierar toppelementet, eller vad XML dokumentet "heter", jag förslår att du skapar en understruktur av taggar och placerar data däri istället för i toppelementet.

Kortfattat, prova w3schools exempel och modifiera istället, lättare att felsöka om du inte har erfarenhet av XSLT. Och på sikt rekommenderar jag att använda en XSLT-processor i t.ex. PHP för att generera HTML, om en webbläsare hittar XSL+XML så kanske det ser rätt ut men omvandligen till HTML sker hos klienten vilket är en viss säkerhetsrisk då all din kod skickas till klienten, inte bara det du vill visa.

Visa signatur

data, representation av värden, text etc. lämpad för överföring, tolkning eller bearbetning av människor eller maskiner.
dator, digital automatisk beräkningsmaskin som styrs av ett i dess minne lagrat program.

Permalänk
Musikälskare

Tack för svaret, ja jag känner att det är en del grejer jag måste läsa på

Gör detta mest för att lära mig lite hur man kan använda XML

Ska kolla upp din länk!

Visa signatur

❀ Monitor: ASUS Swift 27" @ 1440p/165Hz ❀ CPU: Ryzen 7700X ❀ Cooling: Corsair H170i ELITE 420mm ❀ GPU: MSI 3080 Ti SUPRIM X ❀ Memory: Corsair 32GB DDR5 Vengeance ❀ Motherboard: ASUS Crosshair X670E Hero ❀ M.2: Samsung 980 Pro ❀ PSU: Corsair HX1200 ❀ Chassi: Corsair 7000X ❀ Time Spy: 19 340

📷 Mina fotografier
🎧 Vad lyssnar du på just nu?

Permalänk
Medlem

Jag personlig tycker det både blir lättare och mycket tydligare om du har en xml-fil som är strukturerad på följande sätt istället. Förutsätter att du själv får bestämma layouten på XMLn.

<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="_test.xsl"?> <weather> <temp>2° / 17°</temp> <city>Lund</city> <imagesource>bild.png</image> </weather>

Sedan kör du XSL som kör 'select value' på temp, city och imagesource-taggarna.

Permalänk
Medlem

Slängde ihop en lösning på ditt exempel utifrån w3c så kan du titta på denna samtidigt som du följer w3cs-textbeskrivningar Följande fungerar bara enligt min XML-kodlayout ovan. Det är alltså XSL-filen detta. Hoppas den är tydlig

<?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>Weather</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>City</th> <th>Temp</th> </tr> <xsl:for-each select="weather"> <tr> <td><xsl:value-of select="city"/></td> <td><xsl:value-of select="temp"/></td> </tr> <img><xsl:attribute name="src"><xsl:value-of select="imagesource"/></xsl:attribute></img> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

Resultatet kommer bli:

<html> <body> <h2>Weather</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>City</th> <th>Temp</th> </tr> <tr> <td>Lund</td> <td>2° / 17°</td> </tr> <img src="bild.png"> </table> </body> </html>

Permalänk
Musikälskare
Skrivet av poppen:

Jag personlig tycker det både blir lättare och mycket tydligare om du har en xml-fil som är strukturerad på följande sätt istället. Förutsätter att du själv får bestämma layouten på XMLn.

<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="_test.xsl"?> <weather> <temp>2° / 17°</temp> <city>Lund</city> <imagesource>bild.png</image> </weather>

Sedan kör du XSL som kör 'select value' på temp, city och imagesource-taggarna.

Ser bra ut men jag hämtar datan från en extern URL via php och regex och sen konventerar jag den till XML, isf får jag ändra taggarna före XML. Men det fungerar det med

Riktigt trevligt svar, tack!

Visa signatur

❀ Monitor: ASUS Swift 27" @ 1440p/165Hz ❀ CPU: Ryzen 7700X ❀ Cooling: Corsair H170i ELITE 420mm ❀ GPU: MSI 3080 Ti SUPRIM X ❀ Memory: Corsair 32GB DDR5 Vengeance ❀ Motherboard: ASUS Crosshair X670E Hero ❀ M.2: Samsung 980 Pro ❀ PSU: Corsair HX1200 ❀ Chassi: Corsair 7000X ❀ Time Spy: 19 340

📷 Mina fotografier
🎧 Vad lyssnar du på just nu?