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);

Était-ce utile?

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" />

EDIT : En outre, étant donné que vous utilisez un espace de noms par défaut, vous devrez le rendre visible à partir de votre feuille de style:

<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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top