此转换的输出仅包含文本,但我想要HTML和文本输出。我需要做些什么来改变呢?
我正在使用VS 2010
当前示例输出:
Jones Martin Kelley Marshall
注意我也在xsl中有这个,但它没有在我的代码示例中显示:
xsl:output
standalone="no"
method="xml"
indent="yes"
omit-xml-declaration="no"
version="1.0"
的xsl:
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="/people">
<div class="lastnames">
<ul>
<li>
<xsl:value-of select="lastname" disable-output-escaping="yes" />
</li>
</ul>
</div>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
C#:
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(xslPath);
using (XmlWriter writer = XmlWriter.Create(outPath +
fileName +
"." +
fileExt
, xslt.OutputSettings))
{
xslt.Transform(fileNode, null, writer);
writer.Flush();
writer.Close();
}
答案 0 :(得分:1)
如果没有看到输入数据,很难确定出现了什么问题。但首先我建议检查你的xsl:output
元素;你说它出现在输入中“但没有显示在[代码示例中”]。这本身就让我怀疑。事实上,当你显示它时,它没有显示为XML元素,这让我倍加怀疑。
它们与您实际提出的问题无关,但在阅读您的代码时还有其他一些问题:
xsl:output
使用method="xml"
,但您没有制作XHTML;您有没有使用method="html"
?xsl:for-each
没有做任何工作(除非在根元素未命名为people
的情况下使样式表无声地完成而没有输出)。如果用替换模板,那么样式表会更加惯用
<xsl:template match="people">
<div class="lastnames">
<ul>
<xsl:apply-templates/>
</ul>
</div>
</xsl:template>
<xsl:template match="lastname">
<li>
<xsl:apply-templates/>
</li>
</xsl:template>
答案 1 :(得分:1)
这个简单的转型:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="people">
<div class="lastnames">
<ul>
<xsl:apply-templates/>
</ul>
</div>
</xsl:template>
<xsl:template match="lastname">
<li><xsl:apply-templates/></li>
</xsl:template>
</xsl:stylesheet>
应用于此XML文档(未提供!!!):
<people>
<lastname>Jones</lastname>
<lastname>Martin</lastname>
<lastname>Kelley</lastname>
<lastname>Marshall</lastname>
</people>
会产生想要的正确结果:
<div class="lastnames">
<ul>
<li>Jones</li>
<li>Martin</li>
<li>Kelley</li>
<li>Marshall</li>
</ul>
</div>
浏览器按预期显示: