Ik heb een API gemaakt die een folderstructuur uitleest en deze in XML aanlevert in een specifiek format.
Voor mijn Comic reader website heb ik een MVC site gemaakt die deze XML gebruikt om er een html pagina van te maken. Nu heb ik de API zo aangepast dat hij een default namespace meegeeft in de XML.
Sindsdien mislukt de transform. Zie hieronder de XML, Xslt en de code die ik gebruik.
Als ik de XML en de Xslt in een online transformer tool zoals deze gooi dan krijg ik netjes een tabel in html die ik verwacht:
Echter het resultaat in mijn transform in code levert alleen een lege <div id="ComicTable"> op.
Ik heb het vermoeden dat ik in mijn code de namespace die ik gedefiniëerd heb in mijn XML/Xslt nog moet verwerken of meegeven als argument aan de transform, maar ik kan zo even niet zeggen op welke manier je dit dan doet.
Ik heb op deze link wel iets over het opnemen van namespaces en objects in de Transform argumentlist gevonden, maar dan moet je ook een object meegeven en die heb ik eigenlijk niet, want ik heb alleen het resultaat van de transform nodig, niet specifiek een object vanuit de transform.
Kan iemand mij hierbij helpen of advies geven hoe ik dit aanpak?
Voor mijn Comic reader website heb ik een MVC site gemaakt die deze XML gebruikt om er een html pagina van te maken. Nu heb ik de API zo aangepast dat hij een default namespace meegeeft in de XML.
Sindsdien mislukt de transform. Zie hieronder de XML, Xslt en de code die ik gebruik.
XML:
1
2
3
4
5
6
7
8
9
10
11
12
| <folder xmlns="http://www.de-baay.nl/ComicCloud" name="pub" files="2149" totalPages="215" currentPage="3"> <file name="alex12.cbr" path="\Alex\alex12.cbr"/> <file name="alex13.cbr" path="\Alex\alex13.cbr"/> <file name="alex14.cbr" path="\Alex\alex14.cbr"/> <file name="alex15.cbr" path="\Alex\alex15.cbr"/> <file name="alex16.cbr" path="\Alex\alex16.cbr"/> <file name="alex17.cbr" path="\Alex\alex17.cbr"/> <file name="alex18.cbr" path="\Alex\alex18.cbr"/> <file name="alex19.cbr" path="\Alex\alex19.cbr"/> <file name="alex20.cbr" path="\Alex\alex20.cbr"/> <file name="alex21.cbr" path="\Alex\alex21.cbr"/> </folder> |
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:debaay="http://www.de-baay.nl/ComicCloud" exclude-result-prefixes="msxsl debaay"> <xsl:output method="html" indent="yes"/> <xsl:param name="requestUrl"/> <xsl:param name="apiLocation"/> <!--Content table generation --> <xsl:template match="/"> <div id="ComicTable"> <xsl:apply-templates/> </div> </xsl:template> <xsl:template match="debaay:file"> <div class="ComicCell"> <a> <xsl:attribute name="href"> <xsl:value-of select="$requestUrl"/> <xsl:text>Comic/Read</xsl:text> <xsl:value-of select="@path"/> <xsl:text>/0</xsl:text> </xsl:attribute> <p class="ComicThumbnail"> <img alt="thumbnail"> <xsl:attribute name="src"> <xsl:value-of select="$apiLocation"/> <xsl:text>?file=</xsl:text> <xsl:value-of select="@path"/> <xsl:text>&page=0&size=150</xsl:text> </xsl:attribute> </img> </p> <p class="ComicLink"> <xsl:value-of select="@name"/> </p> </a> </div> </xsl:template> </xsl:stylesheet> |
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| TextReader result = new StringReader(tempresult.ToString()); //Prepare the result table StringWriter resultTable = new StringWriter(); XsltArgumentList argList = new XsltArgumentList(); //Pass requestUrl and apiLocation as parameters to the XslStylesheet. Needed to build links to the actual Comics argList.AddParam("requestUrl", "", conf.SiteRoot); argList.AddParam("apiLocation", "", conf.ApiLocation); //Build the comicList to pass to the XslStylesheet. XPathDocument comicList = new XPathDocument(result); //Transform the comicList and set ResultTables property with the result. XslCompiledTransform transform = new XslCompiledTransform(); var trans = HostingEnvironment.MapPath(@"~\Views\Home\FolderTable.xslt"); transform.Load(trans); transform.Transform(comicList, argList, resultTable); |
Als ik de XML en de Xslt in een online transformer tool zoals deze gooi dan krijg ik netjes een tabel in html die ik verwacht:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
| <div id="ComicTable"> <div class="ComicCell"> <a href="Comic/Read\Alex\alex12.cbr/0"> <p class="ComicThumbnail"> <img alt="thumbnail" src="?file=\Alex\alex12.cbr&page=0&size=150"></p> <p class="ComicLink">alex12.cbr</p> </a> </div> <div class="ComicCell"> <a href="Comic/Read\Alex\alex13.cbr/0"> <p class="ComicThumbnail"> <img alt="thumbnail" src="?file=\Alex\alex13.cbr&page=0&size=150"></p> <p class="ComicLink">alex13.cbr</p> </a> </div> <div class="ComicCell"> <a href="Comic/Read\Alex\alex14.cbr/0"> <p class="ComicThumbnail"> <img alt="thumbnail" src="?file=\Alex\alex14.cbr&page=0&size=150"></p> <p class="ComicLink">alex14.cbr</p> </a> </div> <div class="ComicCell"> <a href="Comic/Read\Alex\alex15.cbr/0"> <p class="ComicThumbnail"> <img alt="thumbnail" src="?file=\Alex\alex15.cbr&page=0&size=150"></p> <p class="ComicLink">alex15.cbr</p> </a> </div> <div class="ComicCell"> <a href="Comic/Read\Alex\alex16.cbr/0"> <p class="ComicThumbnail"> <img alt="thumbnail" src="?file=\Alex\alex16.cbr&page=0&size=150"></p> <p class="ComicLink">alex16.cbr</p> </a> </div> <div class="ComicCell"> <a href="Comic/Read\Alex\alex17.cbr/0"> <p class="ComicThumbnail"> <img alt="thumbnail" src="?file=\Alex\alex17.cbr&page=0&size=150"></p> <p class="ComicLink">alex17.cbr</p> </a> </div> <div class="ComicCell"> <a href="Comic/Read\Alex\alex18.cbr/0"> <p class="ComicThumbnail"> <img alt="thumbnail" src="?file=\Alex\alex18.cbr&page=0&size=150"></p> <p class="ComicLink">alex18.cbr</p> </a> </div> <div class="ComicCell"> <a href="Comic/Read\Alex\alex19.cbr/0"> <p class="ComicThumbnail"> <img alt="thumbnail" src="?file=\Alex\alex19.cbr&page=0&size=150"></p> <p class="ComicLink">alex19.cbr</p> </a> </div> <div class="ComicCell"> <a href="Comic/Read\Alex\alex20.cbr/0"> <p class="ComicThumbnail"> <img alt="thumbnail" src="?file=\Alex\alex20.cbr&page=0&size=150"></p> <p class="ComicLink">alex20.cbr</p> </a> </div> <div class="ComicCell"> <a href="Comic/Read\Alex\alex21.cbr/0"> <p class="ComicThumbnail"> <img alt="thumbnail" src="?file=\Alex\alex21.cbr&page=0&size=150"></p> <p class="ComicLink">alex21.cbr</p> </a> </div> </div> |
Echter het resultaat in mijn transform in code levert alleen een lege <div id="ComicTable"> op.
Ik heb het vermoeden dat ik in mijn code de namespace die ik gedefiniëerd heb in mijn XML/Xslt nog moet verwerken of meegeven als argument aan de transform, maar ik kan zo even niet zeggen op welke manier je dit dan doet.
Ik heb op deze link wel iets over het opnemen van namespaces en objects in de Transform argumentlist gevonden, maar dan moet je ook een object meegeven en die heb ik eigenlijk niet, want ik heb alleen het resultaat van de transform nodig, niet specifiek een object vanuit de transform.
Kan iemand mij hierbij helpen of advies geven hoe ik dit aanpak?
Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)