VB.Net appliquer la transformation XSL pour fichier XML
J'ai eu quelques XML, qui est construit par mon application. Ce XML est tombé à un fichier XML, que j'ai ensuite souhaitent appliquer une feuille de style XSL pour convertir une page HTML. Cependant, à chaque fois, il ne cesse de venir avec le XML d'origine plutôt que de le transformer en HTML
Voici le XML:
<firelist>
<visitor>
<Title>Mr</Title>
<Forename>Gregory</Forename>
<Surname>House</Surname>
<Visiting>asasasas</Visiting>
<VisitTime>11:41</VisitTime>
<PurposeOfVisit>asasasasa</PurposeOfVisit>
<BadgeID>a</BadgeID>
<Campus>KWA</Campus>
<VisitingFrom>Princeton-Plainsboro Teaching Hospital</VisitingFrom>
<ImagePath>\\more\DataCard\VisitorPhotos\V0004.jpg</ImagePath>
</visitor>
</firelist>
Voici la feuille de style :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="visitor">
<xsl:value-of select="title"/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
et voici le code qui ne le transformer :
Dim document As XmlDocument ''# Xml document root
Dim navigator As XPathNavigator ''# navigate document
Dim transformer As XslTransform ''# transform document
Dim output As StringWriter
document = New XmlDocument()
document.Load("firelist.xml")
''# create navigator
navigator = document.CreateNavigator
''# load style sheet
transformer = New XslTransform()
transformer.Load("firelist.xslt")
''# transform XML data
output = New StringWriter()
transformer.Transform(navigator, Nothing, output)
''# display transformation in text box
Console.WriteLine(output.ToString)
''# write transformation result to disk
Dim stream As FileStream = New FileStream("firelist.html", FileMode.Create)
Dim writer As StreamWriter = New StreamWriter(stream)
writer.Write(output.ToString)
''# close streams
writer.Close()
output.Close()
C'est l'âge que j'ai fait n'importe quoi avec XSL et .NET donc je suis sûr que je suis probablement manquer quelque chose d'évident!
Mise à JOUR:
Voici le code tel qu'il est actuellement à la suite de modifications apportées en raison de ci-dessous des suggestions...
Code-Behind:
Dim document As XmlDocument ' Xml document root
Dim navigator As XPathNavigator ' navigate document
Dim transformer As XslCompiledTransform ' transform document
Dim output As StringWriter
document = New XmlDocument()
document.Load("firelist.xml")
' create navigator
navigator = document.CreateNavigator
' load style sheet
transformer = New XslCompiledTransform()
transformer.Load("firelist.xslt")
' transform XML data
output = New StringWriter()
transformer.Transform(navigator, Nothing, output)
' display transformation in text box
Console.WriteLine(output.ToString)
' write transformation result to disk
Dim stream As FileStream = _
New FileStream("firelist.html", FileMode.Create)
Dim writer As StreamWriter = New StreamWriter(stream)
writer.Write(output.ToString)
' close streams
writer.Close()
output.Close()
XML:
<?xml version="1.0" encoding="utf-8"?>
<firelist>
<visitor>
<Title>Dr</Title>
<Forename>James</Forename>
<Surname>Wilson</Surname>
<Visiting>bob</Visiting>
<VisitTime>11:30</VisitTime>
<PurposeOfVisit>dunno</PurposeOfVisit>
<BadgeID>4</BadgeID>
<Campus>KWA</Campus>
<VisitingFrom>Princeton-Plainsboro Teaching Hospital</VisitingFrom>
<ImagePath>\\more\DataCard\VisitorPhotos\V0005.jpg</ImagePath>
</visitor>
</firelist>
XSLT:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/firelist">
<html>
<body>
<xsl:for-each select="visitor">
<xsl:value-of select="title"/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Je suis encore seulement obtenir l'original XML être sortie de mon fichier HTML, plutôt que le HTML qui devraient résulter de l'XML/XSLT de Transformation.
Messagebox montre le XML correctement, ça fonctionne bien. C'est après ce point où la transformation xsl, changez le code html qui ne fonctionne pas.
OriginalL'auteur hermiod | 2009-07-27
Vous devez vous connecter pour publier un commentaire.
Vous avez le mal de XPath dans votre boucle:
Bien que pour une meilleure lisibilité et une meilleure utilisation de XSLT fonctionnalités, je voudrais vous recommandons de travailler avec des modèles plutôt explicite pour chaque boucles:
Encore, votre XPath était faux. 🙂 Le reste fonctionne pour moi (testé sur VS 2005).
OriginalL'auteur Tomalak
Je ne suis pas sûr de ce que le problème d'origine, mais vous devriez éviter d'utiliser
XslTransform
tout à fait (c'est déconseillé), et l'utilisationXslCompiledTransform
à la place. Voici comment:Essayer cela et voir si vous obtenez un comportement différent.
OriginalL'auteur Pavel Minaev
trouvé le problème... très basique. Il y a une diff entre
et
le transformateur lors
transformer.Transform(navigator, Nothing, output)
est sensible à la casse lorsqu'il utilise le fichier xslt.
la balise xml est
le xslt balise est
J'ai utilisé le débogueur de piste que l'activation du transformateur débogueur
Profitez-en !!
OriginalL'auteur blancail
D'essayer de changer le XSLT:
OriginalL'auteur Jason Evans