Obtenir la valeur d'un élément XML via XSLT en utilisant la valeur de
-
14-11-2019 - |
Question
Je sais que je manque quelque chose de simple ici, mais je ne peux pas comprendre.J'ai d'autres, plus complexes, XML et XSLT fonctionnent, mais pour une raison quelconque, je ne peux pas obtenir cela spécifique.Je crois que c'est la structure du fichier XML généré lors de la sérialisation.
Ce que je cherche à faire, c'est obtenir la valeur d'un élément XML et l'afficher en HTML.J'ai tout repris à l'exception des domaines spécifiques liés à cette question.
dans la variable "HTML" dans le code, la valeur de l'emplacement est toujours vide.
xml
<WidgetBuilder>
<DefaultLocation>1234</DefaultLocation>
</WidgetBuilder>
xslt
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" version="1.0" exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="yes" />
<xsl:template match="/">
LOCATION: '<xsl:value-of select="DefaultLocation" />'
</xsl:template>
</xsl:stylesheet>
code
string xml = File.ReadAllText(@"..\..\InitXml1.xml");
string xslt = File.ReadAllText(@"..\..\InitXslt1.xslt");
XPathDocument doc = new XPathDocument(new StringReader(xml));
XslCompiledTransform xslTransform = new XslCompiledTransform();
xslTransform.Load(XmlReader.Create(new StringReader(xslt)));
StringWriter sw = new StringWriter();
xslTransform.Transform(doc, null, sw);
string html = sw.ToString();
Console.WriteLine(html);
La solution
Votre modèle XSL correspond au noeud racine de document , pas l'élément de document(Ils ne sont pas la même chose).Essayez:
<xsl:value-of select="WidgetBuilder/DefaultLocation" />
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:dc="schemas.datacontract.org/2004/07/YourFullClassName"
version="1.0" exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="yes" />
<xsl:template match="/">
LOCATION: '<xsl:value-of select="dc:WidgetBuilder/dc:DefaultLocation" />'
</xsl:template>
</xsl:stylesheet>
voir ici pour une explication détaillée et d'autresUtilisez des cas.