【发布时间】:2010-01-11 15:44:17
【问题描述】:
任何人都可以让我开始将一些 XML 转换为 HTML。我以前做过 XSLT 转换,但从来没有从头开始,而且我似乎遗漏了一些东西。
从类似这样的 XML 开始:
<order name="fred" value="123.45">
<lines>
<line description="foo" value="123"/>
<line description="bar" value="0.45"/>
</lines>
</order>
...还有一个如下所示的 XSLT 文件:
<?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" exclude-result-prefixes="msxsl">
<xsl:decimal-format name="sterling" decimal-separator="." grouping-separator=","/>
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<xsl:apply-templates select="order"/>
</head>
<body>
<table border="2">
<xsl:apply-templates select="order/lines/line"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="order">
Name is '<xsl:value-of select="@name"/>' and value is <xsl:value-of select="format-number(@value, '£#,###.00', 'sterling')"/>
</xsl:template>
<xsl:template match="order/lines/line">
<tr>
<td>
<xsl:value-of select="@description"/>
</td>
<td>
<xsl:value-of select="@value"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
当我使用 C# 中的 XslCompiledTransform 对象进行转换时,我得到了基本的 html,但没有行的内容。我用来转换的代码如下:
private static String GetHtml(String xml)
{
String result;
var doc = new XmlDocument();
doc.LoadXml(xml);
var transformer = new XslCompiledTransform(true);
transformer.Load("foobar.xslt");
using (var writer = new StringWriter())
{
transformer.Transform(doc, null, writer);
result = writer.ToString();
}
return result;
}
非常感谢任何帮助。
罗斯
(顺便说一句,如果在使用 format-number 函数时,我必须提供格式字符串,那么 xsl:decimal-format 元素的意义何在?)
【问题讨论】: